非常简单的问题,真的。我到处都找到了一个我没有运气的确切问题的人......
在标签“A”中,我拨打window.open()
。新选项卡(选项卡“B”)开始加载,其脚本包含一些ajax。它所做的ajax调用需要很长时间(这是故意的,因为我试图处理冗长的ajax调用)。当标签“B”在超过10秒后冻结时,标签“A”也会冻结。
我尝试过调用window.open("url", "_blank");
以及window.open("url");
,似乎都没有解决问题。
为了让事情更加混乱,我尝试了实验,以便选项卡“B”打开,ajax 不会超时,一切正常。 然后我更改了标签“B”中的URL参数(这是通过ajax发送数据库参数的原因,并且是长时间请求的原因),当它按预期超时时,仍然冻结窗口“A”。
我确定我错过了什么。 window.open()调用完成后,选项卡“B”与选项卡“A”有什么关系。我不明白他们是如何依旧相互联系的。虽然所有这些都在其他选项卡上正常工作。
为了记录我在Mac上使用Chrome但看到了类似的“量子纠缠”,让我们在Safari中也称之为。
此外,两个页面都使用DataTables jQuery插件。它是在API中进行的ajax调用。我无法想象DataTables如何成为这里的罪魁祸首......
任何想法,SO社区???
先谢谢!
答案 0 :(得分:5)
那是因为新窗口在与开启窗口相同的过程中打开。
要使链接在与您的网页不同的进程中打开,只需添加rel =" noreferrer"和目标=" _blank"作为标记的属性,然后将其指向不同域名上的URL。例如:
<a href="http://www.google.com" rel="noreferrer" target="_blank">Google</a>
来源:https://blog.chromium.org/2009/12/links-that-open-in-new-processes.html
答案 1 :(得分:1)
根据文档:(https://developer.mozilla.org/en-US/docs/Web/API/Window/open#Window_features)window.open()当前支持功能。因此,我们可以通过noreferrer或noopener,如下所示,它不会冻结或阻止父窗口。
window.open(hostUrl, '_blank', 'noreferrer')
答案 2 :(得分:0)
我猜您需要从窗口对象中删除父引用,如下所示:
openedWindow.opener = null;
答案 3 :(得分:0)
打开窗口后使用window.focus()
。