我目前正在尝试使用Javascript中的以下代码触发文件下载:
window.location.href = downloadUrl;
这在Chrome,IE和Edge中运行良好,但Firefox由于新的URL而卸载了页面,因此关闭了所有打开的websockets。我知道这是FF的一种奇怪的习惯,但有没有可以使用的解决方法?
它可以与window.open(downloadUrl);
一起使用并在某个超时后关闭新选项卡,但我想阻止打开一个新标签只是为了触发下载。
任何帮助将不胜感激,谢谢。
答案 0 :(得分:1)
经过大量的研究和实验,我找到了以下解决方案:
使用下载属性在JavaScript中创建一个链接,单击它并在一段时间后删除它(我正在使用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]);
答案 1 :(得分:1)
在这个问题上偶然发现。当用户单击链接(包括“下载”链接)时,浏览器认为他正在离开当前页面并关闭websocket(这可能是合理的)。通过Javascript onclick事件(或window.open等)打开链接没有帮助。设置target =“ _ blank”会有所帮助,但在单击时会产生不舒服的眨眼。最后,我想到了以下内容:
<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可以正常运行,而且行为不眨眼!