【问题标题】:How to open a new tab in separate thread with JavaScript? (chrome)如何使用 JavaScript 在单独的线程中打开一个新选项卡? (铬合金)
【发布时间】:2016-09-19 13:07:16
【问题描述】:

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

【问题讨论】:

    标签: javascript google-chrome tabs


    【解决方案1】:

    通常 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

    【讨论】:

    • 嗨@domagojk,您知道“新标签页在新进程中打开同时仍传递引荐来源信息”的另一种解决方法,此处接受的方法似乎不再适用。跨度>
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 这对于这个问题来说太过分了。由于这适用于 Firefox,我认为该解决方案不需要对我的代码进行重大更改。
      【解决方案4】:

      虽然不完全是答案,但对我来说这是最好的答案。打印对话框不应被阻塞。

      我已将此报告为错误并给出了一个测试用例。在这里表达您的支持 - 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 来解决这个问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-02-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-22
        • 1970-01-01
        • 2011-09-07
        • 1970-01-01
        相关资源
        最近更新 更多