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(再次=)所以浏览器也会自动将其添加到浏览历史记录中。
在我的应用程序 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(再次=)所以浏览器也会自动将其添加到浏览历史记录中。