簡體   English   中英

如何在下載URL時強制Chrome不打開“另存為”對話框?

[英]How to force Chrome to NOT open SaveAs Dialog when downloading a URL?

Chrome版本:最新的33+

Chrome擴展程序從當前查看的網站中提取某些網址,然后下載其中的一部分(通常為數百個文件)。

預期行為:

文件被下載到默認的“下載文件夾”中, 而無需詢問文件的保存位置和文件名。

問題:

如果用戶在Chrome->設置->高級設置->下載中啟用了“在下載前先詢問保存每個文件的位置”選項,則在嘗試同時下載(例如100個文件)時,Chrome嘗試打開100個“另存為”對話框,然后崩潰。

我試過的

  • 使用帶有選項saveAs的chrome.downloads.download(對象選項,函數回調)方法:false
  • 使用以下代碼通過模擬的mousevent觸發下載:

     function saveAs(Url,filename){ var blob=new Blob([''], {type:'application/octet-stream'}); var url = webkitURL.createObjectURL(blob); var a = document.createElementNS('http://www.w3.org/1999/xhtml','a'); a.href = Url; a.download = filename; var e = document.createEvent('MouseEvents'); e.initMouseEvent('click', false, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); a.dispatchEvent(e); webkitURL.revokeObjectURL(url); } 

編輯 :我為多個文件下載添加了完整的示例代碼,其中沒有顯示“另存為”對話框。

您可以使用chrome.downloads API來實現。

manifest.json

{
  "description": "Multiple file downloads without showing SaveAs Dialog",
  "background": {
     "scripts": [ "background.js" ],
     "persistent" : true
  },
  "content_scripts": [{
     "js": [ "content_script.js"],
     "matches": [ "<all_urls>" ],
     "run_at": "document_start"
  }],
  "manifest_version": 2,
  "name": "MultipleFileDownloads",
  "permissions": [ "downloads" ],
  "short_name": "MFD",
  "version": "0.0.0.1"
}

content_script.js

var DOWNLOAD_LIMIT = 100;

function downloadURL(url, filename, callback){
    chrome.runtime.sendMessage({
        download_url : url,
        filename : filename
    },function(){
        if(typeof callback == 'function'){
            callback();
        }
    })
}

function simulateFileDownload(i){
    if(i > DOWNLOAD_LIMIT){
        document.getElementById('download_btn').disabled = false;
        return false;
    }
    var blob = new Blob(['This is sample file '+i], {type:'text/plain'});
    var url = URL.createObjectURL(blob);
    downloadURL(url,'Sample-'+i+'.txt',function(){
        URL.revokeObjectURL(url);
        i++;
        simulateFileDownload(i);
    })
}

window.onload = function(){
    var btn = document.createElement('button');
    btn.id = 'download_btn';
    btn.style.cssText = 'position:fixed;top:10px;left:10px;width:140px;height:30px;z-index:1000000;';
    btn.textContent = 'Download Files';
    document.body.appendChild(btn);
    btn.addEventListener('click',function(){
        this.disabled = true;
        simulateFileDownload(0);
    })
}

background.js

chrome.runtime.onMessage.addListener(function(message, sender, sendResponse){
    if(message.download_url){
        chrome.downloads.download({
            url : message.download_url,
            filename : message.filename,
            saveAs : false
        }
    }
});

啟用“在下載之前詢問每個文件的保存位置”時(從70.0.3538.77開始)。 相應的Chromium錯誤是:

錯誤417112:chrome.downloads.download忽略saveAs

此外,在chrome.downloads.downloads()設置文件名也不起作用。

錯誤758094:擴展名無法重命名下載的文件

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM