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

我正在寻找更多关于从 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,下载的文件打开后底层窗口为空白
>元刷新方法也有效,但地址栏仍然会更改为文件的URL,并且文件下载后底层窗口为空
>我拼命想避免使用window.open()来避免任何弹出窗口阻塞程序问题
>我所在的服务器环境将不允许您输出文件本身,就像您在ASP.NET的Response对象中所做的那样

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

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

丹佛迈克

解决方法

下载文件页面的常用模式(如果你必须有一个;我个人讨厌它们)是:
<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>

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

The Meta refresh approach also works,but still the address bar changes to the URL of the file and the underlying window is blank after the file downloads

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

the environment doesn’t allow me to set headers,so P3P is out

您不必使用标头来设置P3P政策,HTML< link>标签也适用:

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

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

I’m desperately trying to avoid window.open() to dodge any popup blocker problems

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

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

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

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...