如何在Internet Explorer中开始自动下载文件?

Pop*_*lin 68 html javascript internet-explorer meta-tags

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

例如,在下载页面中,我想要显示下载链接并显示一条消息:"如果下载没有自动启动......等等".下载应该在页面加载后不久开始.

在Firefox中这很容易,你只需要在标题中包含一个元标记,<meta http-equiv="Refresh" content="n;url">其中n是秒数,url是下载URL.这在Internet Explorer中不起作用.如何在Internet Explorer浏览器中使用此功能?

dev*_*vio 105

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

<iframe width="1" height="1" frameborder="0" src="[File location]"></iframe>
Run Code Online (Sandbox Code Playgroud)

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

  • 哦,这很聪明.你也可以把它变成`display:none`.另外,@ Buda,一些简单的Javascript(哦,不,Javascript?!?!)可以在n秒后添加HTML:HTML:`<iframe id ="download"width ="1"height ="1"style = "display:none"></iframe> </ iframe>`Javascript:`function startDownload(){document.getElementById("download").src ="[File Location]"; } setTimeout(startDownload,n*1000);` (9认同)
  • @NathanHornby,使用`Content-Disposition:attachment; 服务器端的filename = manual.pdf`标题,一切都会好的. (6认同)
  • 我喜欢使用它的想法,但它会遇到某些文件类型的问题.例如,如果您希望提供PDF或图像(或浏览器可以显示的任何内容)的下载链接,浏览器只会尝试在隐藏的iframe中静默显示. (3认同)

Kor*_*nel 51

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

死简单版:

<a href="file.zip">Start automatic download!</a>
Run Code Online (Sandbox Code Playgroud)

有用!在每个浏览器!


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

<a href="report-generator.php" download="result.xls">Download</a>
Run Code Online (Sandbox Code Playgroud)

带有"谢谢"页面的版本:

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

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

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

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

这就是我用于ImageOptim的东西

  • 我喜欢你答案的简单性. (8认同)
  • @DavidRobbins和我喜欢评论的简单性.:d (3认同)
  • 我完全同意使用一个好的旧链接,但这有一个问题:客户端.有时他们想要他们想要的东西,无论你尝试什么并告诉他们.他们在其他网站上看过它,这就是他们在网站上想要的东西. (2认同)

ull*_*ark 23

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

setTimeout(function () { window.location = 'my download url'; }, 5000)
Run Code Online (Sandbox Code Playgroud)

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

  • 应该是`setTimeout(function(){window.location ='我的下载url';},5000)`(没有字符串来setTimeout请) (26认同)
  • @Cerberus:因为一般的想法. (2认同)

kik*_*ito 21

我遇到了类似的问题,上述解决方案都没有对我有用.这是我的尝试(需要jquery):

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

用法:只需添加一个名为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>
Run Code Online (Sandbox Code Playgroud)

它应该适用于所有情况.


小智 7

一小段jQuery为我解决了这个问题.

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

在我的HTML中,我只是

<div class="downloadProject"></div>
Run Code Online (Sandbox Code Playgroud)

所有这一切都是等待一秒半,然后使用iframe附加div,指向您要下载的文件.当iframe更新到页面上时,浏览器会下载该文件.就那么简单.:d


EL *_*bib 6

适用于Chrome,Firefox和IE8及以上版本:

var link = document.createElement('a');
document.body.appendChild(link);
link.href = url;
link.click();
Run Code Online (Sandbox Code Playgroud)


Tyl*_*ler 5

我用这个,似乎工作,只是简单的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>
Run Code Online (Sandbox Code Playgroud)

注意:这将在页面加载时启动超时.


Rab*_*abi 5

这是我在一些网站上使用的(需要jQuery):

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

1秒后自动下载文件.