`

解决 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参数详解

    1. **兼容性**: `window.open()` 方法在大多数现代浏览器中都可用,包括 Chrome、Firefox、Safari 和 Edge 等。 2. **安全性**: 许多浏览器都增加了对弹出窗口的限制,以防止恶意弹出窗口干扰用户的浏览体验。因此,...

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

    在实际应用中,`window.open()`可能会遇到浏览器兼容性问题,不同浏览器对窗口特征参数的支持程度有所不同。以下是各浏览器对`parameters`部分的一些特性支持情况: - **标注1**:在IE7、IE8、Firefox、Chrome和...

    Ajax请求响应中用window.open打开新窗口被拦截的解决方法

    针对Ajax响应后使用`window.open()`被拦截的问题,没有一种完美无缺的解决方案。开发者需要根据实际业务场景选择合适的方法,并考虑用户体验和错误处理。在某些情况下,可能需要优化服务器响应速度,或者设计更友好...

    window.showModalDialog(javascript)

    在其他浏览器中,如Firefox、Chrome和Safari,可能需要使用其他方法,如`window.open()`,配合CSS和JavaScript来实现类似的效果。 - 模态对话框可能会对用户体验造成影响,因为它会阻塞用户的交互,因此在现代Web...

    window.open的页面如何刷新(父页面)上层页面

    标题中的问题 "window.open的页面如何刷新(父页面)上层页面" 指的是如何在使用 `window.open` 创建的新窗口中执行 JavaScript 代码以刷新其父窗口。这个问题的解决方案已经在描述中给出,主要涉及以下 JavaScript ...

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

    当`window.close()`在Firefox中无法关闭非JavaScript打开的窗口时,可能是因为Firefox的默认配置,防止恶意脚本随意关闭窗口。要允许JavaScript关闭窗口,用户需要手动更改浏览器设置。 在实际应用中,开发者应考虑...

    ajax请求成功后新开窗口window.open()被拦截解决方法

    需要注意的是,虽然这些方法可能能够解决`window.open()`被拦截的问题,但它们并不总是100%有效,因为不同的浏览器可能有不同的安全策略。此外,强行新开窗口可能仍然会被浏览器视为不友好的行为,尤其是在现代...

    javascript操作referer详细解析

    如果新窗口与原始页面同域,可以尝试通过`window.opener`对象获取referrer,但跨域时会因权限问题无法获取。 3. **鼠标拖拽打开新窗口**: 这种用户行为导致的新开窗口通常会丢失referrer信息,并且不能通过`...

    前端开源库-bwindow

    `bWindow` 库的出现,旨在帮助开发者解决这些问题,提高开发效率。 **二、主要功能** 1. **新窗口创建**:`bWindow` 提供了创建新窗口的功能,允许开发者自定义新窗口的属性,如大小、位置、URL以及是否在新窗口中...

    showModalDialog模态对话框的使用详解以及浏览器兼容

    然而,Firefox、Safari和Chrome则逐渐停止支持,它们的行为更接近`window.open`,可能不会阻止父窗口的交互,且返回值可能无效。Opera同样不支持此方法,可能导致没有对话框弹出或任何反应。 由于这种不一致性,...

    FormData:FormData支持其中window.FormData未定义

    在前端开发中,FormData对象是HTML5引入的一个重要特性,用于构建和发送数据,通常与...在遇到“window.FormData未定义”的问题时,记得检查浏览器兼容性、执行环境以及代码本身,通常能快速找到解决方案。

    pdf.js前端插件,用于在线预览pdf文件

    - **加载文件**:使用`window.open()`函数创建新窗口,并传递预览参数,如示例所示。`fileUrl`是待预览PDF的URL。 - **预览界面**:`viewer.html`是PDF.js内置的预览界面,它会解析并显示指定的PDF文件。 3. **...

    Javascript之BOM(window对象)详解_.docx

    除了以上特性,window对象还包含了诸如resizeTo和moveTo这样的方法,用于调整窗口大小和位置,以及open和close方法来打开和关闭新窗口。此外,window对象还有许多其他属性和方法,如setTimeout和clearTimeout用于...

    JS判断是否安装APP

    开发者可以尝试用JavaScript的`window.location`或`window.open`打开一个特定的schemeURI,如果应用已安装,浏览器会尝试启动应用;否则,会返回错误,提示未找到处理该URL的程序。 4. **利用`Web App Install ...

    三种js全屏模式

    ### 三、使用`window.open`和`fullscreen`属性实现全屏 #### 实现原理: 通过`window.open`方法打开一个新的窗口,并设置`fullscreen=yes`参数来尝试开启全屏模式。然而,实际应用中,`fullscreen`属性已被废弃,...

    微信跳转到浏览器下载APP实现代码

    在移动互联网时代,微信作为一款超级App,拥有庞大的用户群体,很多开发者希望能在微信内部实现跳转到外部浏览器下载自己的应用程序。本知识点主要探讨如何通过编程实现“微信跳转到浏览器下载APP”的功能,这对于...

    BrowserExtension_TestJavaScriptInjection:用于测试 JavaScript 注入的 BrowserExtension

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

Global site tag (gtag.js) - Google Analytics