【问题标题】:javascript window.open infinite loadingjavascript window.open 无限加载
【发布时间】:2018-10-31 10:26:18
【问题描述】:

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

为了处理它们,我使用以下代码:

$.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.

【问题讨论】:

  • 为了调试目的,在浏览器的控制台中检查响应不是更容易吗?
  • @JJJ 调试消息由 Twig 和 Slim 处理,因此它可能很大,并且包含 HTML。我也可以在当前页面显示错误。我只是对这里的无限加载感到好奇。

标签: javascript window.open


【解决方案1】:

它与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

【讨论】:

  • 对我没用。问题是它“不断加载”,因此在某些浏览器中无法下载文件,因为流仍处于打开状态。想不通,有什么建议吗?
【解决方案2】:

问题是你打开一个没有 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 路径,重要的是一旦加载,您将能够覆盖内容。

这不是最好的解决方案,但至少它成功了

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-13
    • 2016-08-15
    • 2011-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多