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

IT技术 javascript html internet-explorer meta-tags
2021-01-18 09:35:28

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

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

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

6个回答

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

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

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

有人可以解释这应该如何工作吗?我没有看到 'n' 秒的延迟......提前谢谢你。
2021-03-17 09:35:28
@NathanHornby,Content-Disposition: attachment; filename=manual.pdf在服务器端使用标头,一切都会好起来的。
2021-03-22 09:35:28
我喜欢使用它的想法,但它会遇到某些文件类型的问题。例如,如果您希望提供 PDF 或图像(或浏览器可以显示的任何内容)的下载链接,浏览器只会尝试在隐藏的 iframe 中静默显示它。
2021-03-28 09:35:28
哦,这很聪明。你也能做到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);
2021-03-30 09:35:28
这也是audible.com 显然是这样做的。
2021-04-01 09:35:28

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

死简单版本:

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

有用!在每个浏览器中!


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

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

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

如果要在下载后显示“thanks”,请使用:

<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 的内容

一句小心的话。至少在我的 Chrome 21 中,如果来自 setTimeout 的脚本试图移动到另一个页面,那么关注 @href 的尝试就会被取消。因此,这仅在您可以内联显示感谢页面时才有效。
2021-03-13 09:35:28
我完全同意使用一个很好的旧链接,但有一个问题:客户端。有时,无论您尝试告诉他们什么,他们都想要他们想要的。他们已经在其他网站上看到过,这就是他们想要在他们的网站上看到的内容。
2021-03-15 09:35:28
@porneL 我不明白。我以为您建议仅在 X 秒后使用指向自动下载文件 INSTEAD 的链接。
2021-03-26 09:35:28
我喜欢你的简单回答。
2021-04-03 09:35:28
@DavidRobbins,我喜欢您评论的简单性。:D
2021-04-11 09:35:28

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

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

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

或者像这样放入代码: Page.ClientScript.RegisterStartupScript(Me.GetType, "filedownload", "setTimeout(function () { window.location = 'http://" & Page.Request.Url.Authority & filename & "'; }, 0)", 真)
2021-03-29 09:35:28
应该是setTimeout(function () { window.location = 'my download url'; }, 5000)(请不要设置超时字符串)
2021-04-01 09:35:28
@Cerberus:因为总体思路。
2021-04-03 09:35:28
可能是最简单的解决方案。
2021-04-03 09:35:28

我遇到了类似的问题,上述解决方案都不适合我。这是我的尝试(需要 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>

它应该适用于所有情况。

我喜欢。漂亮干净,您可以将其添加到您想要的任何链接。我喜欢为该data-*属性找到很酷的新用途
2021-04-02 09:35:28

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