【问题标题】:How to download a file via a Chrome Content Script?如何通过 Chrome 内容脚本下载文件?
【发布时间】:2014-10-31 17:13:14
【问题描述】:

SO answer 详细介绍了如何通过 Chrome 扩展程序下载文件,但我使用的是内容脚本 which has limited access to Chrome's APIs。换句话说,我无权访问chrome.downloads 对象。我也试过这个vanilla JS solution,但它对我不起作用。有没有人有内容脚本的解决方案或知道为什么第二个解决方案不起作用?

【问题讨论】:

    标签: google-chrome-extension content-script


    【解决方案1】:

    写一个background pageevent page 并使用example in your linked answer 从那里开始。使用chrome messages 与内容脚本进行通信。

    【讨论】:

    • 一个工作示例会很有帮助,因为我在尝试使其正常工作时遇到了一个又一个问题......
    【解决方案2】:

    如果您的意思是使文件下载到用户的计算机上,则此代码将在 Chrome 扩展内容脚本或 JS 脚本和常规网页中运行:

    首先,您可以通过简单地将"download" attribute 添加到锚标记来使文件在没有任何JS 的情况下下载。使用此标记,将下载该 URL,而不是导航到“href”属性中的 URL。

    <a href="http://website.com/example_1.txt" download="saved_as_filename.txt" id="downloader">
        static download link</a>
    

    动态更新 URL:

    var theURL = 'http://foo.com/example_2.txt';
    $('#downloader').click(function() {
        $(this).attr('href',theURL);
    });
    

    如果您希望通过点击链接以外的其他方式启动下载,您可以模拟点击链接。请注意, .trigger() 不适用于此目的。相反,您可以使用document.createEvent

    $('#downloader').css('display','none');
    function initiateDownload(someURL) {    
         theURL = someURL;
         var event = document.createEvent("MouseEvent");
         event.initMouseEvent("click", true, true, window, 0, 0, 0, 80, 20, false, false, false, false, 0, null);
         // dispatch event won't work on a jQuery object, so use getElementById
         var el = document.getElementById('downloader');
         el.dispatchEvent(event);
    }
    initiateDownload('example_3.txt');
    

    【讨论】:

    • 除非要下载的文件在同一个域中,否则这将不起作用。如果文件在子域中,它将不起作用。相反,即使在扩展名中,下载属性也将被完全粗暴地忽略,并且文件将被打开,就像单击了链接一样,例如替换现有的窗口内容。
    猜你喜欢
    • 2015-03-24
    • 1970-01-01
    • 2022-10-15
    • 1970-01-01
    • 2011-09-25
    • 2020-10-15
    • 2012-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多