我試圖在Chrome擴展中下載多個文件。以下代碼創建一個到文件的虛擬鏈接,然後觸發下載該文件的.click()事件。 問題是隻有第一個.click()事件觸發下載。後續的.click()事件被忽略。JavaScript click()方法只能在Chrome擴展中運行一次
這裏manifest.json的:
{
"name": "Simple File Downloader",
"version": "0.1",
"permissions": ["contextMenus", "http://*/"],
"background": {
"persistent": false,
"scripts": ["sample.js"]
},
"content_security_policy": "script-src 'self'; object-src 'self'",
"manifest_version": 2
}
這裏sample.js:
function onClickHandler(info, tab) {
var a = document.createElement('a');
a.href = 'http://or.cdn.sstatic.net/chat/so.mp3';
a.download = 'so.mp3';
document.body.appendChild(a);
a.click(); // this click triggers the download
// this timeout violates content security policy
// setTimeout(a, 300);
a.click(); // this click doesn't do anything
document.body.removeChild(a);
a = document.createElement('a');
a.href = 'http://or.cdn.sstatic.net/chat/so.mp3';
a.download = 'so.mp3';
document.body.appendChild(a);
a.click(); // this click doesn't do anything either
document.body.removeChild(a);
};
chrome.contextMenus.onClicked.addListener(onClickHandler);
chrome.runtime.onInstalled.addListener(function() {
chrome.contextMenus.create({"title": "Download File", "id":"download_file"});
});
我已經試過:
不同的方法下載文件描述使用FileSaver.js,具有完全相同的結果Chrome Extension write to file system d,第一個文件被下載,二是不
增加超時在Is it possible to make two .click method calls in javascript描述,導致內容安全策略違規,我試圖解決使用Content-Security-Policy error in google chrome extension making描述的方法,但都沒有成功
使用jQuery .live方法在JQuery click event works only once描述,也沒有成功,但我不是100%肯定我正確地實現這一個(可以在以後發佈的代碼,如果人認爲這種方法應該可以解決它)
驚訝爲什麼很難簡單地保存多個文件。感謝任何幫助。
等了幾個月,和['chrome.downloads'](https://developer.chrome.com/dev/extensions/downloads。HTML)API廣泛可用。關於CSP錯誤:'a'是一個鏈接,其'toString'屬性返回鏈接的目標。所以,如果你使用'setTimeout(a,300);',它會嘗試評估鏈接的目標。字符串作爲代碼評估是默認禁止的,所以你會得到錯誤。但是,如果使用'setTimeout(function(){a.click();},300);',該文件仍然沒有被下載。 –
您是否找到解決此問題的臨時解決方案? – coneybeare
我認爲這是不可能的安全問題。如果可能的話,那麼事實上我可以打開無限彈出/下載只需點擊一下。 –