我已经构建了一个网页,让您从下拉列表中选择一个页面名称,然后将浏览器转移到该页面。进行转移的代码是
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 并在 promise 解决时设置位置。
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>
window.open
放入函数中并使用 onclick
调用该函数,Safari 将不会打开新标签页。该函数必须在 to click 元素内。对答案的小修正:<button onclick='window.open("https://www.google.com", "_blank");'>Open Google search</button>
。
window.open
文档中有一个带有该标题的小节。似乎很清楚。
您不能依赖 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);
target
以使其行为符合 OP 的预期。
target
属性并将其设置为 _blank
再次打破这一点,Safari 将阻止它作为弹出窗口
摘自史蒂夫于 2013 年 12 月 20 日接受的答案评论:
实际上,有一个非常简单的方法可以做到这一点:只需在 iMac/Safari 浏览器中单击“阻止弹出窗口”,它就会执行我想要的操作。
澄清一下,在 Mac OS X El Capitan 上运行 Safari 时:
Safari -> 首选项安全 -> 取消选中“阻止弹出窗口”
href
的情况下解决需求。这个答案在这里的原因是提醒人们浏览器正在使打开弹出窗口变得更加困难。
window.location.assign(url)
这解决了 ios 设备中的 window.open(url)
问题
url
在当前选项卡中打开,而不是在新选项卡中打开(如问题中所指定)。
window
。除此之外,在您的 url
是 String
类型的情况下,分配 url
效果更好
在新选项卡中打开链接,使用 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')
行代码包装在 async 函数中也可以,
setTimeout(() => {
window.open(url, '_blank');
})
setTimeout 代码在主线程上运行,而不是异步的。在 Chrome 和 Safari 中测试。
在 Safari 中的“标签”下有一个标记为 Open pages in tabs instead of windows:
的设置,带有一个带有几个选项的下拉菜单。我想你的可能设置为 Always
。底线是你不能依赖浏览器打开一个新窗口。
这应该有效:window.location.assign(url);
通常在离开页面之前保存状态很重要,因此也要记住这一点。
正确的语法是 window.open(URL,WindowTitle,'_blank')
open 中的所有参数都必须是字符串。它们不是强制性的,可以删除窗口。因此,如果您打算自己填充 newWin.document,只需 newWin=open()
也可以。但是您必须使用所有三个参数,第三个参数设置为 '_blank'
来打开一个新的真实窗口而不是标签。
不定期副业成功案例分享
windowReference.close()
立即关闭它。