在不关闭 websockets 的情况下在 Firefox 中更改 window.location.href
Change window.location.href in Firefox without closing websockets
我目前正在尝试使用 Javascript 中的以下代码触发文件下载:
window.location.href = downloadUrl;
这在 Chrome、IE 和 Edge 中工作正常,但 Firefox 由于新 URL 卸载了页面,因此关闭了所有打开的 websockets。我知道这是 FF 的一种奇怪的习惯,但是有什么我可以使用的解决方法吗?
它可以与 window.open(downloadUrl);
一起使用并在一定超时后关闭新选项卡,但我想防止打开一个新选项卡只是为了触发下载。
如有任何帮助,我们将不胜感激,谢谢。
经过大量研究和试验,我找到了以下解决方案:
在JavaScript中创建一个带有下载属性的link,点击它并在一段时间后将其删除(我使用的是ExtJs):
var a = document.createElement("a");
document.body.appendChild(a);
a.style = 'display: none';
a.href = downloadUrl;
a.download = 'test.zip';
a.click();
Ext.defer(function(link) {
document.body.removeChild(link);
}, 200, this, [a]);
刚刚偶然发现了这个问题。当用户单击 link(包括 'download')时,浏览器认为他正在离开当前页面并关闭 websocket(这可能是合理的)。通过 Javascript onclick 事件(或 window.open 等)打开 link 没有帮助。设置 target="_blank" 会有所帮助,但会在单击时产生不舒服的 blink。最后我想出了以下内容:
<iframe src="about:blank" name="iframe_a" class="ws_keep_conn"></iframe>
<a href="https://www.fileserver.com/file.xml" target="iframe_a">Click this</a>
CSS
.ws_keep_conn {position: absolute; left: -9999px; visibility: hidden;}
就是这样,websocket 生活,没有 blink!
的流畅行为
我目前正在尝试使用 Javascript 中的以下代码触发文件下载:
window.location.href = downloadUrl;
这在 Chrome、IE 和 Edge 中工作正常,但 Firefox 由于新 URL 卸载了页面,因此关闭了所有打开的 websockets。我知道这是 FF 的一种奇怪的习惯,但是有什么我可以使用的解决方法吗?
它可以与 window.open(downloadUrl);
一起使用并在一定超时后关闭新选项卡,但我想防止打开一个新选项卡只是为了触发下载。
如有任何帮助,我们将不胜感激,谢谢。
经过大量研究和试验,我找到了以下解决方案:
在JavaScript中创建一个带有下载属性的link,点击它并在一段时间后将其删除(我使用的是ExtJs):
var a = document.createElement("a");
document.body.appendChild(a);
a.style = 'display: none';
a.href = downloadUrl;
a.download = 'test.zip';
a.click();
Ext.defer(function(link) {
document.body.removeChild(link);
}, 200, this, [a]);
刚刚偶然发现了这个问题。当用户单击 link(包括 'download')时,浏览器认为他正在离开当前页面并关闭 websocket(这可能是合理的)。通过 Javascript onclick 事件(或 window.open 等)打开 link 没有帮助。设置 target="_blank" 会有所帮助,但会在单击时产生不舒服的 blink。最后我想出了以下内容:
<iframe src="about:blank" name="iframe_a" class="ws_keep_conn"></iframe>
<a href="https://www.fileserver.com/file.xml" target="iframe_a">Click this</a>
CSS
.ws_keep_conn {position: absolute; left: -9999px; visibility: hidden;}
就是这样,websocket 生活,没有 blink!
的流畅行为