解决 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);//这个等待很重要,如果不等待的话将无法实现
    }
   })
  });

JavaScript_解决safari浏览器window.open无法实现的问题的更多相关文章

  1. safari 浏览器window.history.go(-1)运行无效解决办法

    这几天做了几个手机端app的wap页面,做完之后发现一个问题,那就是ios系统下的safari浏览器不支持window.history.go(-1)..无语... 解决方法很简单!加上return f ...

  2. 苹果safari浏览器window.open问题

    现象:在做项目的过程中,使用window.open打开新窗口,在windows系统的ie,firefox,chrome浏览器上测试均没有问题,在苹果系统的safari浏览器上发现有些window.op ...

  3. safari浏览器cookie问题

        这个题目可能有点大了,这里主要讨论一种解决safari浏览器阻止第三方cookie问题.       场景       公司存在多个域名(a.com,b.com,co.com)这些域名应该统一 ...

  4. ios系统微信浏览器、safari浏览器中h5页面上拉下滑导致悬浮层脱离窗口的解决方法

    一. 运行环境: iphone所有机型的qq浏览器,safari浏览器,微信内置浏览器(qq浏览器内核)等. 二. 异常现象: 1. 大幅度上下滑动h5页面,然后停止滑动,有时候会影响到页面滚动,如局 ...

  5. safari浏览器在window下 打开控制台

    有时候需要在window下测试safari浏览器的兼容性 然后需要打开错误控制台 以下是完整打开的图文教程 1.显示菜单栏 2.打开偏好设置 3.然后切换到高级标签 勾选 在菜单栏显示开发菜单 4.打 ...

  6. 解决Safari高版本浏览器中默认禁用第三方COOKIE(含demo)

    前段时间在项目里遇到了一个比较头疼的问题,就是高版本的Safari中默认会阻止第三方cookie,这使得使用Safari浏览器的用户无法按照正常的业务逻辑进行操作. 问题展现 知识点 什么是第三方co ...

  7. 解决java web中safari浏览器下载后文件中文乱码问题

    解决java web中safari浏览器下载后文件中文乱码问题 String fileName = "测试文件.doc"; String userAgent = request.g ...

  8. 解决chrome浏览器无法得到window.showModalDialog返回值的问题

    父页面处理: function ProductList() {   var TypeID = window.document.getElementById("Type").valu ...

  9. ios10 safari浏览器 在touchmove 里面写e.preventDefault(); 不起作用 的解决方法

    最近做手机端项目遇到一个问题,就是在ios10系统里面  safari浏览器 在touchmove 里面写e.preventDefault();不起作用 更种google 还是没有找到解决方法 最后找 ...

随机推荐

  1. FlashDevelop快捷键

    将鼠标点到变量上面后,同时按ctrl+shift+1(左键盘),可以自动添加变量或者函数.复制一行代码.CTRL+D:ctrl+shift+k 颜色代码拾取器 ctrl+shift+b 注释年选代码段 ...

  2. /var/lock/subsys作用

    转自: http://sunxiaqw.blog.163.com/blog/static/9906543820111184422807/ 关于/var/lock/subsys目录 总的来说,系统关闭的 ...

  3. 30.赋值运算符重载函数[Assign copy constructor]

    [问题] 给出如下CMyString的声明,要求为该类型添加赋值运算符函数.  C++ Code  1234567891011   class CMyString { public:     CMyS ...

  4. xcode 和 android studio中在Mac系统下的自动对齐快捷键

    这个快捷键太常用了,又总忘记,记录下. xcode  ctrl+i android studio win+alt+L

  5. ubuntu 13.10 amd64安装ia32-libs

    很多软件只有32位的,有的依赖32位库还挺严重的:从ubuntu 13.10已经废弃了ia32-libs,但可以使用多架构,安装软件或包apt-get install program:i386.有的还 ...

  6. AngularJS学习笔记1

    简介 AngularJS 是一个为动态WEB应用设计的结构框架,提供给大家一种新的开发应用方式,这种方式可以让你扩展HTML的语法,以弥补在构建动态WEB应用时静态文本的不足,从而在web应用程序中使 ...

  7. Jam的计数法(codevs 1140)

    题目描述 Description Jam是个喜欢标新立异的科学怪人.他不使用阿拉伯数字计数,而是使用小写英文字母计数,他觉得这样做,会使世界更加丰富多彩.在他的计数法中,每个数字的位数都是相同的(使用 ...

  8. 学习BigDecimal用法

    一.简介 Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算.双精度浮点型变量double可以处理16位有效数.在实际应用中,需要对更大或者更 ...

  9. Source Insight 多标签插件

    Source Insight不仅仅是一个强大的程序编辑器,它还能显示reference trees,class inheritance diagrams和call trees.Source Insig ...

  10. vim 多窗口

    打开多个文件: 1.vim还没有启动的时候: 在终端里输入 vim file1 file2 ... filen便可以打开所有想要打开的文件 2.vim已经启动 输入 :open file 可以再打开一 ...