在调移动支付问题的时候遇到过,用window.open打开一个微信支付连接,唤醒移动支付,在IOS下死活唤醒不了,是js代码冲突问题...是click事件IOS下不兼容问题...最后定位到window.open语句,以后改成window.loaction.href,奇迹般的能够唤醒支付,所以,也就很直观的证实了在Safari下用window.open是有问题的jquery
缘由:大部分现代的浏览器(Chrome/Firefox/IE 10+/Safari)都默认开启了阻止弹出窗口的策略,缘由是window.open被广告商滥用,严重影响用户的使用。这个阻止弹出窗口的操做,并非直接封杀window.open(),而是会根据用户的行为来判断此次window.open()是否属于流氓操做。ajax
若是是由用户触发的动做所引发的 window.open 就不会被浏览器所阻止,好比写在 onclick 这些事件 handler 里的,但若是是代码本身触发的就会被阻止。json
那么,咱们能够知道,在Safari中没法open新窗口,缘由是Safari的安全机制将其阻挡。浏览器
并非全部地方都没法正常使用,在一些ajax或者jquery的getjson等回调代码中只要调用window.open都失效。缘由是苹果的安全策略拦截。安全
解决办法有4种:微信
(1)用window.location.replace()来替代,【或者改变location.href,能够解决,缺点就是否是新开的窗口】函数
(2)苹果系统设置,偏好设置->安全性,去掉阻止弹窗的复选框就ok了。 【不建议,会改变用户的设置】微信支付
(3)在回到函数中生成一个连接,让用户再次点击下,由于连接是不管如何不会被拦截的。【不建议,多加了一个动做】url
(4)在回调代码以前打开一个空窗口,例如 var w=window.open(xxx); 而后在回调函数中设置它的location。【推荐】code
例如w.location=yyy; 具体分析和代码参考:
var openWin = function(){ var winRef = window.open("url","_blank"); $.ajax({ type: '', url: '', data: '', ...... success:function(json){ winRef.location = "新的url"; } }); };