如何在Internet Explorer中初始化文件的自动下载?
例如,在下载页面中,我希望显示下载链接,并显示一条消息:“如果下载不会自动开始……等”。页面加载后不久应开始下载。
在Firefox中,这很容易,您只需要在标头中包含一个meta标记即可,<meta http-equiv="Refresh" content="n;url">
其中n是秒数,url
是下载URL。这在Internet Explorer中不起作用。如何在Internet Explorer浏览器中实现此目的?
Answers:
SourceForge使用一个<iframe>
元素,该元素的src=""
属性指向要下载的文件。
<iframe width="1" height="1" frameborder="0" src="[File location]"></iframe>
(副作用:没有重定向,没有JavaScript,原始URL保持不变。)
display:none
。另外,@ Budda,一些简单的Javascript(哦,不,Javascript?!?!)可以在n秒后添加HTML:HTML:<iframe id="download" width="1" height="1" style="display:none"></iframe>
Javascript:function startDownload () { document.getElementById("download").src="[File Location]"; } setTimeout (startDownload, n * 1000);
Content-Disposition: attachment; filename=manual.pdf
在服务器端使用标头,一切都会好的。
我讨厌网站如此繁琐的下载,并使用骇客代替了良好的旧链接。
<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
变色,如果在浏览器重新启动后页面保持打开状态就不会重新下载等。
我最近通过在页面上放置以下脚本解决了该问题。
setTimeout(function () { window.location = 'my download url'; }, 5000)
我同意元刷新会更好,但是如果它不起作用,您会怎么做...
setTimeout(function () { window.location = 'my download url'; }, 5000)
(请不要设置setTimeout的任何字符串)
我遇到了类似的问题,以上解决方案均不适合我。这是我的尝试(需要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="https://stackoverflow.com/your/file/url">here</a>.</p>
它应该在所有情况下都有效。
data-*
属性找到不错的新用途!
一个简单的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
适用于Chrome,firefox和IE8及更高版本:
var link = document.createElement('a');
document.body.appendChild(link);
link.href = url;
link.click();
我用了这个,看起来很正常,只是简单的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>
注意:这会在页面加载时开始超时。
多一个 :
var a = document.createElement('a');
a.setAttribute('href', dataUri);
a.setAttribute('download', filename);
var aj = $(a);
aj.appendTo('body');
aj[0].click();
aj.remove();
我希望这将适用于所有浏览器。您还可以设置自动下载时间。
<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>
这似乎适用于我-在所有浏览器中。
<script type="text/javascript">
window.onload = function(){
document.location = 'somefile.zip';
}
</script>
对于那些尝试使用动态链接触发下载的用户的人来说,要使其在所有浏览器中都能一致地工作是很棘手的。
我在IE10 +下载PDF时遇到了麻烦,并使用了@dandavis的 download
功能(https://github.com/rndme/download)。
IE10 +需要msSaveBlob
。
不错的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>.
<meta http-equiv="Refresh" content="n;url">
而已。容易吧?
<meta http-equiv="Refresh" content="n;url">