75

如何在 Internet Explorer 中初始化文件的自动下载?

例如,在下载页面中,我希望出现下载链接和一条消息:“如果您的下载没有自动开始......等等”。下载应在页面加载后不久开始。

在 Firefox 中这很容易,您只需在标题中包含一个元标记,<meta http-equiv="Refresh" content="n;url">其中 n 是秒数,url是下载 URL。这在 Internet Explorer 中不起作用。如何在 Internet Explorer 浏览器中进行这项工作?

4

18 回答 18

109

SourceForge使用属性指向要下载的文件的<iframe>元素。src=""

<iframe width="1" height="1" frameborder="0" src="[File location]"></iframe>

(副作用:没有重定向,没有 JavaScript,原始 URL 保持不变。)

于 2008-10-01T08:34:41.370 回答
52

讨厌网站使下载变得如此复杂并使用黑客而不是好的旧链接

死简单版本:

<a href="file.zip">Start automatic download!</a>

有用!在每个浏览器中!


如果您要下载通常以内联方式显示的文件(例如图像),则 HTML5 具有download强制下载文件的属性。它还允许您覆盖文件名(尽管有更好的方法):

<a href="report-generator.php" download="result.xls">Download</a>

带有“感谢”页面的版本:

如果您想在下载后显示“谢谢”,请使用:

<a href="file.zip" 
   onclick="if (event.button==0) 
     setTimeout(function(){document.body.innerHTML='thanks!'},500)">
 Start automatic download!
</a>

其中的功能setTimeout可能更高级,例如通过 AJAX 下载整页(但不要离开页面——不要触摸window.location或激活其他链接)。

关键是下载链接是真实的,可以复制,拖动,下载加速器拦截,获取:visited颜色,如果在浏览器重新启动后页面保持打开状态,则不会重新下载等。

这就是我用于 ImageOptim 的方法

于 2008-11-18T23:16:23.980 回答
24

我最近通过在页面上放置以下脚本来解决它。

setTimeout(function () { window.location = 'my download url'; }, 5000)

我同意元刷新会更好,但如果它不起作用你会做什么......

于 2008-10-01T08:29:23.130 回答
22

我有一个类似的问题,上述解决方案都不适合我。这是我的尝试(需要 jquery):

$(function() {
  $('a[data-auto-download]').each(function(){
    var $this = $(this);
    setTimeout(function() {
      window.location = $this.attr('href');
    }, 2000);
  });
});

用法:只需添加一个属性调用data-auto-download指向相关下载的链接:

<p>The download should start shortly. If it doesn't, click
<a data-auto-download href="/your/file/url">here</a>.</p>

它应该适用于所有情况。

于 2012-03-07T17:45:36.790 回答
8

一个简单的 jQuery 为我解决了这个问题。

$(function() {
   $(window).bind('load', function() {
      $("div.downloadProject").delay(1500).append('<iframe width="0" height="0" frameborder="0" src="[YOUR FILE SRC]"></iframe>'); 
   });
});

在我的 HTML 中,我只是有

<div class="downloadProject"></div>

所有这一切都是等待一秒钟半,然后将 div 与 iframe 一起附加到您要下载的文件。当 iframe 更新到页面上时,您的浏览器会下载该文件。就那么简单。:D

于 2011-06-25T04:59:38.277 回答
6

我用过这个,似乎工作,只是简单的 JS,没有框架:

Your file should start downloading in a few seconds. 
If downloading doesn't start automatically
<a id="downloadLink" href="[link to your file]">click here to get your file</a>.

<script> 
    var downloadTimeout = setTimeout(function () {
        window.location = document.getElementById('downloadLink').href;
    }, 2000);
</script>

注意:这会在页面加载的那一刻开始超时。

于 2012-10-04T00:50:09.193 回答
6

适用于 Chrome、firefox 和 IE8 及更高版本:

var link = document.createElement('a');
document.body.appendChild(link);
link.href = url;
link.click();
于 2016-04-28T13:48:55.463 回答
5

这是我在某些网站中使用的(需要 jQuery)。:

$(document).ready(function() {
    var downloadUrl = "your_file_url";
    setTimeout("window.location.assign('" + downloadUrl + "');", 1000);
});

文件会在 1 秒后自动下载。

于 2013-01-28T15:40:38.533 回答
3

我检查并发现,它可以通过将 onclick 事件写入 Anchor 标签或输入按钮来处理按钮单击

onclick='javascript:setTimeout(window.location=[File location], 1000);'
于 2012-06-16T05:44:36.273 回答
3

回到根源,我使用这个:

<meta http-equiv="refresh" content="0; url=YOURFILEURL"/>

也许不符合 WC3,但在所有浏览器上都能完美运行,没有 HTML5/JQUERY/Javascript。

问候汤姆 :)

于 2016-01-14T14:42:59.293 回答
3

我希望这适用于所有浏览器。您还可以设置自动下载时间。

<html>
<head>
<title>Start Auto Download file</title>
<script src="http://code.jquery.com/jquery-3.2.1.min.js"></script>
<script>
$(function() {
$('a[data-auto-download]').each(function(){
var $this = $(this);
setTimeout(function() {
window.location = $this.attr('href');
}, 2000);
});
});
</script>
</head>
<body>
<div class="wrapper">
<p>The download should start shortly. If it doesn't, click
<a data-auto-download href="auto-download.zip">here</a>.</p>
</div>
</body>
</html>
于 2017-08-01T06:43:20.593 回答
3

多一个 :

var a = document.createElement('a');
a.setAttribute('href', dataUri);
a.setAttribute('download', filename);

var aj = $(a);
aj.appendTo('body');
aj[0].click();
aj.remove();
于 2019-04-15T09:18:02.123 回答
2

确保提供没有无缓存标头的文件!如果用户在不先保存的情况下尝试“打开”下载,则 IE 会遇到此问题。

于 2008-10-03T18:11:38.750 回答
1

这似乎对我有用 - 在所有浏览器中。

 <script type="text/javascript">
    window.onload = function(){
     document.location = 'somefile.zip';
    }
    </script>
于 2010-07-02T11:30:04.247 回答
1

我认为这对你有用。但是,如果访问者在几秒钟内得到一些东西而不花费更多时间,他们就会很容易,因此他们也会再次访问您的网站。 <a href="file.zip" onclick="if (event.button==0) setTimeout(function(){document.body.innerHTML='thanks!'},500)"> Start automatic download! </a>

于 2012-01-07T08:01:10.933 回答
1

对于那些试图使用动态链接触发下载的人来说,让它在浏览器中一致地工作是很棘手的。

我在 IE10+ 下载 PDF 时遇到了问题,并使用了 @dandavis 的 download功能(https://github.com/rndme/download)。

IE10+需要msSaveBlob

于 2015-07-07T21:04:04.643 回答
0

不错的jQuery解决方案:

jQuery('a.auto-start').get(0).click();

您甚至可以在<a>标签内设置不同的下载文件名:

Your download should start shortly. If not - you can use
<a href="/attachments-31-3d4c8970.zip" download="attachments-31.zip" class="download auto-start">direct link</a>.
于 2019-02-19T06:11:07.587 回答
0
<meta http-equiv="Refresh" content="n;url">

就是这样。容易,对吧?

<meta http-equiv="Refresh" content="n;url">

于 2020-06-09T15:39:06.193 回答