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


72

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

例如,在下载页面中,我希望显示下载链接,并显示一条消息:“如果下载不会自动开始……等”。页面加载后不久应开始下载。

在Firefox中,这很容易,您只需要在标头中包含一个meta标记即可,<meta http-equiv="Refresh" content="n;url">其中n是秒数,url是下载URL。这在Internet Explorer中不起作用。如何在Internet Explorer浏览器中实现此目的?


任何想法如何在铬?
iDebD_gh 2014年

Answers:


107

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

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

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


1
有人可以解释该如何工作吗?我看不到“ n”秒的延迟...提前谢谢。
布达

显然,这也是audible.com的处理方式。
13年

9
哦,这很聪明。您也可以做到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);
Cosine 2013年

3
我喜欢使用此方法的想法,但是某些文件类型会出现问题。例如,如果您希望提供PDF或图像(或浏览器可以显示的任何内容)的下载链接,则浏览器将尝试将其静默地显示在隐藏的iframe中。
内森·霍恩比

7
@NathanHornby,Content-Disposition: attachment; filename=manual.pdf在服务器端使用标头,一切都会好的。
热情的2015年

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


8
我喜欢您回答的简单性。
David Robbins,2009年

3
@DavidRobbins,我喜欢您评论的简单性。:D
Vishwanath Dalvi

1
一句话提醒。至少在我的Chrome 21中,如果来自setTimeout的脚本尝试移动到另一个页面,则取消@href的尝试。因此,这仅在您可以内联显示“谢谢”页面时才有效。
川口浩辅(Kohsuke Kawaguchi)

2
我完全同意使用旧的良好链接,但是存在一个问题:客户。有时,无论您如何尝试告诉他们,他们都会想要他们想要的东西。他们已经在其他站点上看到了,这就是他们在站点上想要的。
raydowe 2013年

1
@porneL我不明白。我以为您建议仅在X秒后使用指向自动下载文件INSTEAD的链接。
raydowe 2013年

24

我最近通过在页面上放置以下脚本解决了该问题。

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

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


26
应该是setTimeout(function () { window.location = 'my download url'; }, 5000)(请不要设置setTimeout的任何字符串)
Shrikant Sharat

2
@Cerberus:因为总体思路。
拉夫

1
可能是最简单的解决方案。
乔治·索维托夫

或像下面这样放在代码中:Page.ClientScript.RegisterStartupScript(Me.GetType,“ filedownload”,“ setTimeout(function(){window.location ='http://”&Page.Request.Url.Authority&filename& “';},0)”,True)
user890332

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="https://stackoverflow.com/your/file/url">here</a>.</p>

它应该在所有情况下都有效。


1
我喜欢。干净整洁,您可以将其添加到所需的任何链接中。我喜欢为该data-*属性找到不错的新用途!
daGUY 2012年

7

一个简单的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


6

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

var link = document.createElement('a');
document.body.appendChild(link);
link.href = url;
link.click();

仅在来自相同来源的下载链接中才能在firefox中工作
ash123 '17

@ ash123尝试一下:function downloadURI(uri,name){var link = document.createElement(“ a”); link.download =名称;link.href = uri; link.click(); }
EL missaoui habib

5

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

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

1秒后自动下载文件。


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>

注意:这会在页面加载时开始超时。


关于您的标志,这将在我们的meta网站上提出。我相信这是以前发生的(但是,有很多类似的投诉,但我找不到与之直接匹配的投诉)
Tim Post

3

我检查并发现,它将onclick事件写入Anchor标签或Input按钮可以在按钮单击上工作

onclick='javascript:setTimeout(window.location=[File location], 1000);'

3

回到根源,我用这个:

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

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

汤姆:)


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();

2

确保提供没有无缓存头的文件!如果用户尝试不首先保存就“打开”下载,则IE会出现问题。


2

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

<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>

在这里演示


1
这个答案挽救了我的生命。我有一个后续问题:如果我将“ auto-download.zip”更改为类似“ stackoverflow.com/questions/156686/… ”的URL ,它将无法正常工作。我的目的是将stackoverflow页面下载为html。
Halfmoonhalf

1

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

 <script type="text/javascript">
    window.onload = function(){
     document.location = 'somefile.zip';
    }
    </script>

2
缺乏这种方法是浏览器等待所有横幅广告加载...有时需要花费一些时间,并且由于愚蠢的横幅广告,用户无法获取文件...
Budda 2010年

除了某些浏览器外,内容是可以在浏览器中直接查看的内容(例如视频文件),实际上并不能在所有情况下强制下载。
mix3d

1

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


1

对于那些尝试使用动态链接触发下载的用户的人来说,要使其在所有浏览器中都能一致地工作是很棘手的。

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

IE10 +需要msSaveBlob


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>.

并非所有浏览器都允许您单击JS的锚标记。以Safari为例,尤其是在url是跨域的情况下
mix3d

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.