window.open(url,'_ blank');没有在iMac / Safari上工作

时间:2013-12-20 03:59:48

标签: javascript macos safari

我构建了一个网页,让您从下拉列表中选择一个页面名称,然后将浏览器传输到该页面。执行转移的代码是

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不会这样做?

8 个答案:

答案 0 :(得分:92)

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

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

var windowReference = window.open();

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

答案 1 :(得分:19)

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

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

答案 2 :(得分:14)

取自史蒂夫于2013年12月20日接受的答案评论:

  

实际上,有一种非常简单的方法:只需点击&#34;阻止弹出窗口&#34;在iMac / Safari浏览器中,它可以满足我的需求。

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

  1. Safari - &gt;首
  2. 安全性 - &gt;取消选中&#39;阻止弹出窗口&#39;

答案 3 :(得分: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);

答案 4 :(得分:0)

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

答案 5 :(得分:0)

window.location.assign(url)可解决ios设备中的window.open(url)问题

答案 6 :(得分:0)

在新标签页中打开链接,使用 JavaScript 编程,适用于:safari、移动 safari 和其他浏览器:

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

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

答案 7 :(得分:-4)

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