繁体   English   中英

window.open(url, '_blank'); 不适用于 iMac/Safari

[英]window.open(url, '_blank'); not working on iMac/Safari

我已经构建了一个 web 页面,让您从下拉列表中获取 select 页面名称,然后将浏览器转移到该页面。 进行转移的代码是

if (url){
    window.open(url, '_blank');
} 

其中“url”是选择的页面。

window.open 行之前的控制台日志打印如下内容:

    executing: window.open(http://www.mywebsite.com/44/threats.html, '_blank')

然后浏览器在新选项卡中打开页面。

这适用于所有浏览器的 Windows 7,包括 Safari。

在 iMac 上,它适用于 Firefox,但不适用于 Safari。

有谁知道为什么 iMac/Safari 不这样做?

Safari 阻止了在异步调用中对 window.open() 的任何调用。

我发现这个问题的解决方案是在进行 asnyc 调用之前调用 window.open 并在承诺解决时设置位置。

var windowReference = window.open();

myService.getUrl().then(function(url) {
     windowReference.location = url;
});

要在 safari 中使用 window.open(),您必须将其放在元素的 onclick 事件属性中。

例如: <button class='btn' onclick='window.open("https://www.google.com", "_blank");'>Open Google search</button>

摘自史蒂夫于 2013 年 12 月 20 日发表的已接受答案评论:

实际上,有一种非常简单的方法可以做到:只需在 iMac/Safari 浏览器中单击“阻止弹出窗口”,它就会执行我想要的操作。

澄清一下,在 Mac OS X El Capitan 上运行 Safari 时:

  1. Safari -> 首选项
  2. 安全 -> 取消选中“阻止弹出窗口”

您不能依赖window.open因为浏览器可能有不同的策略。 我有同样的问题,我改用下面的代码。

let a = document.createElement("a");
document.body.appendChild(a);
a.style = "display: none";
a.href = <your_url>;
a.download = <your_fileName>;
a.click();
document.body.removeChild(a);

window.location.assign(url)这修复了 ios 设备中的window.open(url)问题

Safari 中的“选项卡”下有一个设置,标记为Open pages in tabs instead of windows:带有几个选项的下拉列表。 我想你的可能设置为Always 底线是你不能依赖浏览器打开一个新窗口。

在新选项卡中打开链接,使用 JavaScript 以编程方式用于:safari、移动 safari 和其他浏览器:

const link = 'https://google.com';

const a = document.createElement("a");
a.setAttribute('href', link);
a.setAttribute('target', '_blank');
a.click();

使用 setTimeout

使用 setTimeout 在异步函数中包装window.open(url, '_blank')代码行也有效,

setTimeout(() => {
    window.open(url, '_blank');
})

setTimeout 代码在主线程上运行,而不是在异步线程上运行。 在 Chrome 和 Safari 中测试。

这应该有效: window.location.assign(url); 通常在离开页面之前保存状态很重要,所以也要记住这一点。

正确的语法是window.open(URL,WindowTitle,'_blank') open 中的所有参数都必须是字符串。 它们不是强制性的,可以删除窗口。 所以只要newWin=open()工作,如果你打算自己填充 newWin.document 。 但是您必须使用所有三个参数,第三个参数设置为'_blank'以打开一个新的真实窗口而不是选项卡。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM