This article mainly shares with you. Recently, when I was making a payment, I found that the browser blocked the payment window when it was opened. Baidu found out that it was because ajax was used to verify whether the payment could be made before opening the window, so the user did not actively trigger the opening of ixin. window, the browser thought this was unsafe, so it blocked it.
Solution 1
First open an empty new window, and then change the url of the new window. The specific code is
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("正在加载请稍后!"); } });
This implementation method has a drawback, that is Regardless of whether ajax is successful or not, the line of code var wd = window.open(); will be executed, so both success and failure will open a new window, unless it is closed after failure, but this user experience will be very bad, so I use The second way to achieve it.
Solution 2
Because ajax is asynchronous by default, it has high performance and good user experience, but it also leads to security issues. You need to make the browser think that popping up a new window is safe. , all ajax must be synchronized before popping up a new window. The specific code is
$.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("正在加载请稍后!"); } });
Related recommendations:
effective method for ajax callback to open a new form to prevent browser interception
iframe cross-site blocked by the browser
The above is the detailed content of Two solutions to Ajax opening a new window and being intercepted by the browser. For more information, please follow other related articles on the PHP Chinese website!