`

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

js 
阅读更多
今天在做浏览器兼容问题是,发现safari window.open 无法实现的问题,google了一下,找到了。解决方案!
转载自:http://blog.csdn.net/wgrzhuaq/article/details/7821725

先说下问题是什么吧: 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);//这个等待很重要,如果不等待的话将无法实现
    }
   })
  });


如果实在需要弹出网页,可以用window.showModalDialog()
如果需要另起窗口打开用<a href="地址" target="_blank"></a>也能打开新窗口。
分享到:
评论

相关推荐

    window.open于各浏览器兼容情况

    window.open()对于各浏览器兼容情况

    window.open()详解及浏览器兼容性问题示例探讨

    一、基本语法: window.open(pageURL,name,parameters) 其中: pageURL 为子窗口路径 name 为子窗口名字 parameters 为窗口参数(各参数用逗号分隔) 二、示例 代码如下: [removed] window.open(‘page.html’,’new...

    window.close(); 关闭浏览器窗口js代码的总结介绍

    window.close();... window.open(”,’_self’); window.close();   firefox IE7,Opera, chrome,safari Close 3 window.open(”,’_self’); window.close();   firefox IE7,Opera, chrome,sa

    BrowserExtension_TestJavaScriptInjection:用于测试 JavaScript 注入的 BrowserExtension

    Chrome : window.open(“URL”, “_blank”) , 带有目标 _blank 的超链接 Firefox: window.open(“URL”, “_blank”) , 带有目标 _blank 的超链接 Safari:与目标 _self 的超链接 IE: window.open(“URL”, “_...

    JavaScript的GIF动画生成gif.js.zip

    gif.js 是一个可直接在浏览器上运行的 JavaScript GIF 编码器。支持的浏览器包括:Google ChromeFirefox 17Safari 6Internet ...window.open(URL.createObjectURL(blob)); }); gif.render(); 标签:gifjs

    ajax经典实例大全1,参看源码附件。。。。。。

    ajax经典实例大全1 &lt;!... function loadXMLDoc() { var xmlhttp;... if (window.XMLHttpRequest) ... // IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码 ... document.getElementById("myDiv").... xmlhttp.open

    webarchive:软件包webarchive读取Safari .webarchive文件

    软件包webarchive读取Safari .webarchive文件。 例子 package main import "github.com/dwlnetnl/webarchive" func main () { r , err := os . Open ( "/path/to/saved.webarchive" ) if err != nil { log . ...

    selenium-dotnet-2.45.0.zip

    * Added safe check for window.localStorage in .NET WebDriverBackedSelenium implementation. Patch provided by Timofey Vasenin. * Implemented pluggable element locator factories for .NET PageFactory....

    js使用post 方式打开新窗口

    js中一般新打开窗口很简单直接window.open(url);就可以了, 但是由于我希望传递参数到服务端,而且参数看起来很长一串,而且get方式的提交参数长度是有限制的,因此我有以下需求: 1,js中实现post提交 2,返回的...

    图库新版jQuery焦点图 JS代码

    tips[27] = '“放之四海皆准则”的是真理,真理并不是一种方法,没有一种方法能解决所有的问题;掌握真理,而不是掌握某种方法。'; tips[28] = '在理解的基础上借鉴,就是站在巨人的肩膀之上;没有区分的全盘抄袭,...

    cuteEditor6.0

    支持全屏编辑 (Demo) &lt;br/&gt;It does not open a new window, instead it will resize to fit the browser screen. Edit in full screen mode, maximizing your available space. &lt;br/&gt; ...

    jQuery开发技巧

    25大实用的jQuery技巧和解决方案 1 去除页面的右键菜单 $ document ready function { $ document bind &quot;contextmenu&quot; function e { return false; } ; } ; 2 搜索输入框文字的消失 当鼠标获得焦点 ...

Global site tag (gtag.js) - Google Analytics