javascript window.open 无限加载

javascript window.open infinite loading

我有一个 JQuery ajax 请求可以 return 错误状态和消息。

为了处理它们,我使用了这段代码:

$.ajax("url", {
    options: options
}).done(function(text, statusText, data) {
    //Manage data
}).fail(function(data) {
    //Manage fail
});

在我想要的失败句柄中,在 500: internal server error 的情况下,打开一个带有响应文本的新选项卡(用于调试目的)

我是这样做的:

if (data.status === 500) {
    var w = window.open("App error", "blank");
    w.document.write(data.responseText);
}

而且有效!
除了一点:我的浏览器加载了页面,显示了内容(因为它是静态内容,所有这些都不是真正的问题),但是 选项卡被标记为正在加载...加载中...加载中...

我使用的是 Firefox 63.0(64 位)。

有谁知道这是从哪里来的?这不是很烦人,这只是我不理解的(有趣?)行为。

Here is a fiddle on which I get the exact same behavior.

它与 w.document.write 行有关。如果关闭文档,加载程序将完成。将代码更改为:

if (data.status === 500) {
    var w = window.open("App error", "blank");
    w.document.write(data.responseText);
    w.document.close();
}

来源: Open about:blank window in firefox

问题是您打开的选项卡没有 url,大多数浏览器都希望有 url,这就是我为了摆脱它所做的事情:

      const newWindow = window.open('#');
      if (newWindow) {
        newWindow.addEventListener('load', () => {
          newWindow.document.open();
          newWindow.document.write(request.responseText);
          newWindow.document.close();
          newWindow.stop();
        }, true);

您可以将 # 替换为任何不存在的 url 路径,重要的是一旦它被加载,您将能够覆盖内容。

这不是最好的解决方案,但至少可以解决问题