2

我目前正在使用以下 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 浏览器的可行解决方案。

有任何想法吗?

谢谢你读我。

4

1 回答 1

0

尝试使用锚点和模拟点击而不使用 target=blank

我这样说是因为我有一个类似的下载,包括一个 iframe 和一个简单的链接作为后备。iframe 适用于除 android 之外的所有设备,但简单链接无需离开页面即可成功下载。

于 2013-05-04T23:07:27.967 回答