window.open 下载后 window.location 更改不下载

window.open to a download followed by a window.location change doesn't download

在我的应用程序 javascript 中,我们 运行 window.open(location1) 后跟 window.location = location2 并且似乎 10 次中有 9 次 window.open 从未发生过。这与应该发生的情况相反,位置更改不应停止执行。这发生在 Chrome 和 Safari 中。

导出按钮链接到包含以下内容的页面。它首先打开自己的 url,这次使用 action=go 触发为文件设置的实际下载 headers,等等。然后它将位置更改回原始页面。

<script>
    window.onload = function() {
        window.open(window.location + '&action=go', '_blank');
        window.location = '{{ original_url }}';    
    };
</script>

这在几个月前一直有效。现在它只能工作五分之一或十次。我试过延迟位置变化等,但没有效果。

这感觉很奇怪。您可能想要做的是构建一个 <a>,设置其所有值,包括 "open in new tab" 指令,在页面准备好后将其添加到正文,然后单击并删除它:

const loadSecondary = () => {
  let secondary = document.createElement(`a`);
  secondary.style.display = `none`;
  secondary.setAttribute(`target`, `_blank`);
  secondary.href = ...

  document.body.appendChild(secondary);
  secondary.click();
  document.body.removeChild(secondary);
};

document.addEventListener(`DOMContentLoaded`, loadSecondary);

这样做的好处是 (a) 它是一个普通的 link,因此您不必处理 window.open 参数和弹出窗口阻止,以及 (b) 它是一个普通的 link(再次=)所以浏览器也会自动将其添加到浏览历史记录中。