【问题标题】:Auto Pop Up Save As Window For FirefoxFirefox 的自动弹出另存为窗口
【发布时间】:2013-09-02 16:21:45
【问题描述】:

我一直在使用此代码<a href="FILEPATH">download PDF</a> 直接下载 pdf 的链接,但此代码仅适用于谷歌浏览器

谁能帮助我在 Mozilla Firefox 和 IE8 中也能做到这一点。因为当我尝试在 Mozilla Firefox 中对其进行测试时,它会打开链接但不会弹出“另存为”窗口。

【问题讨论】:

  • 您需要它是HTML5 还是您有可以访问的服务器端代码?我通常使用标题进行下载
  • 你想要一个Content-Disposition: attachment 响应头。您还可以在 A 标签上添加 Download 属性,该属性适用于 Firefox 和 Chrome,但不适用于 IE。
  • @EricLaw 我已经尝试在文件路径之后放置一个下载属性,但这仍然只适用于谷歌浏览器,但在 Mozilla Firefox 中它会在同一窗口中打开链接
  • 我不知道“文件路径之后”是什么意思。 Firefox 20+ 应该支持 Download 属性,根据 caniuse.com/download 您是否添加了 Content-Disposition: 附件标头?

标签: html popup


【解决方案1】:

我会使用 PHP 标头,因此请在 url 中使用类似这样的内容引用文件:

 <a href="/download.php?file=myFile.pdf">download PDF</a>

然后使用php传递文件:

 <?php
 /* put some validation and injection protection here */
 $approvedFiles = ["myFile.pdf","myOtherFile.pdf"];

 if (!in_array($_GET['file'],$approvedFiles)){
  header("HTTP/1.1 404 Not Found"); 
  die();
 }

 //otherwise
 header('Content-type: application/pdf');
 header('Content-Disposition: attachment; filename="myFile.pdf"');
 readfile('myFile.pdf'); 

注意:伪代码并不完美:)

参考:http://php.net/manual/en/function.header.php

【讨论】:

    【解决方案2】:

    http://jsfiddle.net/RemMp/

    <a id="save_data" href="">link</a>
    
    window.URL = window.webkitURL || window.URL;
    var a = document.getElementById('save_data');
    
    var data = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg==';
    var filename = 'qqq.pdf';
    
    a.download = filename;
    a.href = data;
    a.textContent = 'Downloading...';
    
    //release memory
    a.onclick = function(e){
        save_cleanup(this);
        };
    //force click
    document.querySelector('#save_data').click();
    
    function save_cleanup(a){
        a.textContent = 'Downloaded';
        setTimeout(function(){
            a.href = '';
            var element = document.getElementById("save_data");
            element.parentNode.removeChild(element);
            }, 1500);
        };
    

    【讨论】:

    • 是的,这是 html5 版本,不需要服务器,但需要支持[下载]的新浏览器。 caniuse.com/download
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-17
    • 1970-01-01
    • 2020-05-28
    • 1970-01-01
    • 2011-12-03
    • 1970-01-01
    • 2019-04-03
    相关资源
    最近更新 更多