zoukankan      html  css  js  c++  java
  • JavaScript_解决safari浏览器window.open无法实现的问题

    解决 safari window.open 无法实现的问题

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

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

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

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


      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("", "_blank");//打开一个新的页面
       App.post('accountSet/getServerName.do',{id:id},function(data){
        var ro = mac.eval(data);
        if(ro.success){
         function loc(){
          var ll = 'http://'+ro.data.info+'.teenydata.com/'+name+'/index.jsp';
          winRef.location = ll;//改变页面的 location
         }
         setTimeout(loc(),800);//这个等待很重要,如果不等待的话将无法实现
        }
       })
      });

  • 相关阅读:
    类的自动载入
    设计模式的概述
    laravel开发微信公众号1 之基本配置
    laravel 中 与前端的一些事5 之解决缓存问题:version
    laravel 中 与前端的一些事4 之合并压缩静态文件
    H3C AR28-31路由器组网实验
    二分查找找一个数所在的范围
    从Code::Blocks到Dev–C++,Dev-C++安装调试一条龙
    Code::Blocks使用与调试一条龙
    JSP相对路径与绝对路径探秘
  • 原文地址:https://www.cnblogs.com/gisblogs/p/4686190.html
Copyright © 2011-2022 走看看