首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >window.open(url,'_blank');在iMac/Safari上不起作用

window.open(url,'_blank');在iMac/Safari上不起作用
EN

Stack Overflow用户
提问于 2013-12-20 11:59:48
回答 8查看 132.5K关注 0票数 90

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

代码语言:javascript
运行
复制
if (url){
    window.open(url, '_blank');
} 

其中"url“是所选的页面。

紧接在window.open行之前的控制台日志打印如下所示:

代码语言:javascript
运行
复制
    executing: window.open(http://www.mywebsite.com/44/threats.html, '_blank')

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

这在Windows7上运行得很好,适用于所有浏览器,包括Safari。

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

有人知道为什么iMac/Safari不能这么做吗?

EN

回答 8

Stack Overflow用户

发布于 2016-09-08 17:39:47

Safari会阻止对window.open()的任何调用,这是在异步调用内部进行的。

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

代码语言:javascript
运行
复制
var windowReference = window.open();

myService.getUrl().then(function(url) {
     windowReference.location = url;
});
票数 218
EN

Stack Overflow用户

发布于 2014-06-20 20:29:58

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

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

票数 22
EN

Stack Overflow用户

发布于 2020-07-30 18:12:31

你不能依赖window.open,因为浏览器可能有不同的策略。我也遇到了同样的问题,于是我使用了下面的代码。

代码语言:javascript
运行
复制
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);
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20696041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档