使用window.open()时,如果新窗口也冻结了父

时间:2016-01-22 23:12:10

标签: javascript ajax datatables window.open

非常简单的问题,真的。我到处都找到了一个我没有运气的确切问题的人......

在标签“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社区???

先谢谢!

4 个答案:

答案 0 :(得分:5)

那是因为新窗口在与开启窗口相同的过程中打开。

要使链接在与您的网页不同的进程中打开,只需添加rel =&#34; noreferrer&#34;和目标=&#34; _blank&#34;作为标记的属性,然后将其指向不同域名上的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()