即使在IE中,启动一个运行良好的文件下载?

时间:2009-04-07 23:05:18

标签: javascript internet-explorer download

我正在寻找更多关于从Javascript启动文件下载的最佳方式的想法。

Best way to initiate a download?有很多好主意可以概括为:

  • 在iframe上设置src
  • 使用window.location.replace()
  • 使用包含元刷新标题的页面
  • 使用window.open()
  • 让服务器直接输出文件,设置Content-Type和Content-Disposition

除了IE8之外,所有这些方法都适用于我一直在测试的浏览器。在IE8中,我遇到了一些问题:

  • 由于我正在使用的环境设置了Cookie,iframe无法正常工作。我想我需要启用P3P标头才能解决此问题,但环境不允许我设置标头,因此 P3P已经
  • window.location.replace()的工作原理除外,在IE8中,窗口的地址栏更改为文件的URL,打开下载的文件后基础窗口为空 < / LI>
  • 元刷新方法也有效,但地址栏更改为文件的网址,文件下载后基础窗口为空白
  • 我拼命想避免使用window.open()来躲避任何弹出窗口拦截器问题
  • 我所在的服务器环境不允许您输出文件本身,就像您可以做的那样,ASP.NET的Response对象

我甚至没有尝试使用IE6或IE7这些方法,因此可能会有其他惊喜。

因此,有人提出在IE中启动下载的任何其他建议,其中(1)不涉及弹出窗口,(2)文件可以保存或打开,(3)没有留下空白窗口,(3)仅使用Javascript,HTML和文件的URL?

丹佛迈克

1 个答案:

答案 0 :(得分:5)

下载文件页面的常用模式(如果你必须有一个;我个人讨厌它们)是:

<script type="text/javascript">
    window.onload= function() {
        window.location= document.getElementById('downloadlink').href;
    }
</script>
<p>
    Your download will begin shortly. If it doesn't,
    <a id="downloadlink" href="file.zip">click here</a>.
</p>

或者使用元刷新而不是脚本。无论哪种方式都应该表现得非常相似。

  

元刷新方法也有效,但地址栏更改为文件的URL,文件下载后底层窗口为空白

这不应该发生。是否有在线版本可以测试?通常情况下,当浏览器通过任何常规方法(链接点击,location.href,元刷新)推送到直接文件下载时,它应该将上一页保持在屏幕上。

  

环境不允许我设置标题,因此P3P已经出局

您不必使用标头来设置P3P政策,HTML&lt; link&gt;标签也适用:

<link rel="P3Pv1" href="/policy.p3p" />

但你为什么需要?如果目标URL只是提供文件,则根本不需要设置cookie,那么为什么还要烦扰P3P?

  

我拼命试图避免使用window.open()来避免任何弹出窗口阻塞程序问题

如果你响应用户点击window.open(),则没有弹出窗口阻止程序问题。

不是说你应该打开弹出窗口才能下载文件。我开始认为你链接到的文件下载目的地有一些非常奇怪的东西 - 比如它根本不是文件下载,而是某种奇怪的HTML网络应用程序。链接到下载并不难,你只需链接到文件,完成工作;你似乎比现在更加努力。

仅链接到文件的唯一常见问题是,如果它包含文本,HTML,XML或图像,浏览器将以内联方式显示它而不是下载它。打败这种情况的唯一方法是使用“Content-Disposition:attachment”标题,或者通过设置此标题的脚本提供,或者通过配置Web服务器为所有文件下载发送标题。如果您无法在服务器环境中执行任何操作,则无法解决问题。

相关问题