我目前正在使用以下 JS 代码来触发文件下载,而无需离开我所在的页面:
var iframe = document.createElement('iframe');
iframe.style.display = 'none';
document.body.appendChild(iframe);
iframe.src = "/somefile.zip";
它几乎在我测试的所有地方都运行良好,除了在股票 Android 浏览器和 Dolphin 上,下载根本没有开始。到目前为止一切顺利,经过一些研究,这个隐藏的 iframe 技巧恰好在 Android 浏览器上不起作用。
但是我尝试了其他几种方法来触发 Android 浏览器上的下载,包括window.open()
(不可靠,因为默认情况下启用了弹出窗口阻止),或者<a target="_blank">
使用模拟click()
(从弹出窗口阻止程序的角度来看相当于window.open()
并被阻止),或者document.location = ...
下载文件但破坏了我的应用程序。
后者的问题document.location = ...
在于,这是一个 Comet 应用程序(服务器推送/长轮询),所以我真的无法离开我当前所在的页面(并且“离开”包括更改document.location
文件下载,即使显然浏览器停留在当前页面上)否则长轮询连接停止并且更新停止,应用程序中断。这显然也适用于手动或模拟单击普通链接时。
因此,为了不破坏我的应用程序,我真的需要在不离开我所在页面的情况下触发文件下载。不幸的是,我没有找到任何适用于现有 Android 浏览器的可行解决方案。
有任何想法吗?
谢谢你读我。