window.open在Safari中的问题


相信有不少朋友碰到过该问题,前些天我也遇到了,网上搜索了好久才找到一高人提供了一个优美的解决方案。

先说下问题是什么吧: safari 中没办法在回调函数里面执行window.open, 原因是safari的安全机制将其阻挡了(具体的原因可能需要你自己深入研究)..

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

那么window.open 在safari 中 只有当用户触发事件之后才能被调用成功的,怎么解决这个问题呢? 很简单, 绕过这个该死的安全机制,在你调用ajax请求之前,打开这个窗口, 然后在回调函数里面修改新打开窗口的location, 这样就解决了。这个解决方案是我前两天从国外一位兄台的博客上找到的,相信国内的某些兄弟可能会用到,所以在此发出来,希望能对你有所帮助。

简单示例代码如下(假设应用jquery):

var startNewWin = function(){

    var winRef = window.open("", "_blank", "/*自己设置需要的属性参数*/");

    $.ajax({

     ....

    success:function(resp){

           ...

          winRef.location = <你需要的location>;

   }

  });

}

这里还有个技巧,因为与后端交互可能有一定的时间的缘故,所以你可以在startNewWin 时打开一个modalDialog, jquery 的overlay很好用, 表示让用户等待, 相应结束后,在success 里面隐藏这个overlay,那么新的弹出窗口这个时候才会被弹出来。(如果用这个技巧的话,记得在修改新窗口的location的时候,包含在setTimeout里面延迟大概500-1000,因为你不这样做的话,你该路径的语句可能在窗口没打开之前就被执行了。。)

 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值