最近在做支付時發現開啟支付視窗時被瀏覽器攔截了,百度了一下才發現是因為開啟視窗前用ajax驗證是否能支付,所以不是使用者主動觸發的開啟ixin視窗,瀏覽器認為這樣不安全,所以給攔截了。 解決辦法一
先開始開啟一個空的新視窗,然後改變新視窗的url,具體代碼為
var wd = window.open();$.ajax({ type: "POST", dataType: "json", url: URL, data: {orderNo:orderNo}, success: function(data) { if(data.status=='success'){ wd.location.href = 'http://www.baidu.com'; }else{ alert('訂單不能支付。'); } },error: function(data) { alert("正在載入請稍後。"); }});
這種實現方式有個弊端,就是不管ajax有沒有成功,都會執行 var wd = window.open();這行代碼,所以成功和失敗都會開啟一個新視窗,除非在失敗後進行關閉,但這樣使用者體驗會非常不好,所以我用的第二種方式去實現的。 解決辦法二
因為ajax是預設是非同步,這樣效能高,使用者體驗好,但這也導致了安全問題,要讓瀏覽器認為彈出新視窗是安全的,必須讓彈新視窗之前所有的ajax是同步的,具體代碼為
$.ajax({ type: "POST", dataType: "json", url: URL, async: false,//同步請求 data: {orderNo:orderNo}, success: function(data) { if(data.status=='success'){ window.open("www.baidu.com"); }else{ alert('訂單不能支付。'); } }, error: function(data) { alert("正在載入請稍後。"); }});