代码之家  ›  专栏  ›  技术社区  ›  Pop Catalin

如何在Internet Explorer中启动文件的自动下载?

  •  65
  • Pop Catalin  · 技术社区  · 17 年前

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

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

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

    15 回复  |  直到 8 年前
        1
  •  100
  •   Nathan    10 年前

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

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

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

        2
  •  48
  •   Community Mohan Dere    9 年前

    憎恨 当网站让下载变得如此复杂 use hacks instead of a good old link .

    死的简单版本:

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

    它起作用了!在每个浏览器中!


    如果要下载通常以内联方式显示的文件(如图像),则HTML5具有 download 强制下载文件的属性。它还允许您重写文件名( although there is a better way to do it ):

    <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 颜色,如果在浏览器重新启动后页面保持打开状态,则不会重新下载。

    That's what I use for ImageOptim

        3
  •  20
  •   kikito    13 年前

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

    在任何情况下都应该有效。

        4
  •  20
  •   TheSoftwareJedi jac    8 年前

    我最近通过把下面的脚本放在页面上解决了这个问题。

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

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

        5
  •  7
  •   CameronK    14 年前

    一个简单的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
  •  5
  •   Rabi    13 年前

    这是我在一些站点中使用的(需要jquery)。

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

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

        7
  •  5
  •   John Weisz    8 年前

    我使用了这个,看起来很有效,只是简单的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>
    

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

        8
  •  4
  •   John Weisz    8 年前

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

    var link = document.createElement('a');
    document.body.appendChild(link);
    link.href = url;
    link.click();
    
        9
  •  3
  •   Josh Darnell Eric Parshall    14 年前

    我检查发现,它可以通过将on click事件写入锚定标记或输入按钮来操作按钮click。

    onclick='javascript:setTimeout(window.location=[File location], 1000);'
    
        10
  •  2
  •   scunliffe    17 年前

    一定要把文件送上去 没有 无缓存头!IE对此有问题,如果用户试图“打开”下载而不先保存。

        11
  •  2
  •   JulienD    9 年前

    回到根,我用这个:

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

    也许不符合WC3标准,但在所有浏览器上都是完美的,没有html5/jquery/javascript。

    你好,汤姆:)

        12
  •  1
  •   Dan TheCodeJunkie    15 年前

    在所有浏览器中,这似乎对我都有效。

     <script type="text/javascript">
        window.onload = function(){
         document.location = 'somefile.zip';
        }
        </script>
    
        13
  •  1
  •   raheel    14 年前

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

        14
  •  1
  •   Community Mohan Dere    9 年前

    对于那些试图使用 动态链接 要让它在浏览器中始终如一地工作是很困难的。

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

    IE10+需求 msSaveBlob .

        15
  •  0
  •   M. Lak    8 年前

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

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

    Demo Here