关于iOS系统中Safari浏览器不兼容window.open方法

在ajax回调函数里面使用window.open(直接使用window.open属于浏览器行为,所以被阻止打开新窗口);

 safari 中没办法在回调函数里面执行window.open, 原因是safari的安全机制将其阻挡了

那么如果你有这样的需求(或者类似的),通过ajax 发送请求到服务器端,等待请求响应成功之后,根据从服务器端响应得到的数据,打开一个窗口显示给用户,在safari上是没办法直接一个window.open搞定的( 浏览器没问题, IE, firefox, chrome).

当window.open为用户触发事件内部或者加载时,不会被拦截,一旦将弹出代码移动到ajax或者一段异步代码内部,马上就出现被拦截的表现了

那么window.open 在safari 中 只有当用户触发事件之后才能被调用成功的,怎么解决这个问题呢? 很简单, 绕过这个该死的安全机制,在你调用ajax请求之前,打开这个窗口, 然后在回调函数里面修改新打开窗口的location, 这样就解决了。

解决办法:

1、苹果系统设置,偏好设置->安全性,去掉阻止弹窗的复选框就ok了。(这是网上看到的方法,没试过)

2、

pg.find('[name=gotoAccountSet]').unbind('click').click(function(){
       var sel = pg.find('select option:selected');
       var id = sel.attr("id");
       var name = sel.html(); 
       var winRef = window.open("URL", "_blank");//打开一个新的页面
       App.post(
        'accountSet/getServerName.do',
        {id:id},
        function(data){
                var ro = mac.eval(data);
                if(ro.success){
                    function loc(){
                          var url = 'http://'+ro.data.info+'.teenydata.com/'+name+'/index.jsp';
                          winRef.location = url;//改变页面的 location
                     }
                 setTimeout(loc(),800);//这个等待很重要,如果不等待的话将无法实现
                }
           }
    )
  });

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值