Chrome 拡張機能で複数のファイルをダウンロードしようとしています。次のコードは、ファイルへのダミー リンクを作成し、ファイルをダウンロードする .click() イベントをトリガーします。問題は、最初の .click() イベントだけがダウンロードをトリガーすることです。後続の .click() イベントは無視されます。
ここに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 拡張機能のファイル システムへの書き込みで説明されているように、ファイルをダウンロードするためのさまざまな方法があります。まったく同じ結果が得られます。最初のファイルがダウンロードされ、2 番目のファイルはダウンロードされません。
Is it possible to make two .click method calls in javascriptで説明されているようにタイムアウトを追加すると、content-security-policy 違反が発生します。Google Chrome拡張機能の Content-Security-Policy エラーで説明されているアプローチを使用して回避しようとしました。しかし、成功せずに
jQuery click event works only onceで説明されているように jQuery .live メソッドを使用すると、これも成功しませんが、これを正しく実装したかどうかは 100% 確信が持てません (人々がこのアプローチで解決すると思われる場合は、後でコードを投稿できます)。
複数のファイルを単純に保存するのがなぜそんなに難しいのか、驚きました。どんな助けにも感謝します。