如何使用JavaScript在单独的线程中打开新选项卡? (铬)

时间:2016-09-19 13:07:17

标签: javascript google-chrome tabs

是否可以打开一个在单独的线程中运行的新弹出选项卡?更具体地说,如果我创建一个新的弹出选项卡并在该新选项卡中开始调试,则包含链接的选项卡也会暂停javascript,直到我在新选项卡中单击resume。我想要实现的是创建一个分离的新选项卡,以便在父选项卡继续运行时我可以调试它。 我使用Chrome浏览器时遇到此问题。请注意,这在Firefox中运行良好(尚未在其他浏览器中测试过)。

4 个答案:

答案 0 :(得分:6)

通常chrome会强制新窗口在相同的进程ID上运行。 但是,有一些技术允许站点打开一个新窗口而不强制它进入同一个过程:

使用指向新窗口的其他网站的链接,而不传递引荐来源信息。

<a href="http://differentsite.com" target="_blank" rel="noreferrer">Open in new tab and new process</a>

如果您希望在新流程中打开新标签,同时仍然传递引荐来源信息,则可以在JavaScript中使用以下步骤:

  • 使用about:blank作为目标打开新选项卡。
  • 将新打开的标签的opener变量设置为null,以便它无法访问原始页面。
  • 从about:blank重定向到与原始页面不同的网站。

例如:

var w = window.open();
    w.opener = null;
    w.document.location = "http://differentsite.com/index.html";

从技术上讲,原始网站仍然可以通过w访问新网站,但是他们将.opener = null视为中间窗口的线索。

来源:https://bugzilla.mozilla.org/show_bug.cgi?id=666746

答案 1 :(得分:0)

您是否尝试过使用Web Workers?不确定支持,但他们应该提供并行的JS执行功能。请参阅herehere

答案 2 :(得分:0)

当使用domagojk引用的null打开技巧时,当前版本的Chrome似乎没有使用单独的线程。但是,如果您使用的是javascript处理程序,您仍然可以利用他提到的noreferrer链接技巧:

        var e = document.createElement("a");
        e.href="/index.html";
        e.target="_blank";
        e.rel = "noreferrer";
        e.click();

答案 3 :(得分:0)

尽管不是完全答案,但对我来说,这是最佳答案。打印对话框不应阻塞。

我已将此报告为错误并给出了测试用例。在此处显示您的支持-https://bugs.chromium.org/p/chromium/issues/detail?id=1023161&q=ryein%20goddard&colspec=ID%20Pri%20M%20Stars%20ReleaseBlock%20Component%20Status%20Owner%20Summary%20OS%20Modified

我认为,一旦Chromium修复了此错误,我们就不必再担心它了。目前,这确实是唯一的选择。

对我来说,答案是我们需要Google / Chromium来解决此问题。