Chrome拡張機能で複数のファイルをダウンロードしようとしています。次のコードは、ファイルへのダミーリンクを作成し、ファイルをダウンロードする.click()イベントをトリガーします。 問題は、最初の.click()イベントだけがダウンロードを開始することです。後続の.click()イベントは無視されます。ここでJavaScriptのclick()メソッドはChrome拡張機能で1回のみ動作します
manifest.jsonを:私が試した
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"});
});
:
異なるアプローチをダウンロードするためにここでsample.js
{ "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 }
記述されたファイル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 click event works only onceで説明したが、私は私が正しく、このいずれかを実施し、100%はわからないようにjQuery .live方法を使用して
なし(後でコードを投稿することができ、人々の場合このアプローチで解決しなければならないと思います)
なぜ複数のファイルを簡単に保存するのが難しいのか驚いた。助けをお待ちしています。
[chrome.downloads'](https://developer.chrome.com/dev/extensions/downloads)を数ヶ月待ちます。html)APIが広く入手可能です。 CSPエラーについて: 'a'はリンクです。その' toString'プロパティはリンクのターゲットを返します。したがって、 'setTimeout(a、300);'を使うと、リンクのターゲットを評価しようとします。 String-as-codeの評価はデフォルトでは禁止されているため、エラーが発生します。 'setTimeout(function(){a.click();}、300);'を使うと、ファイルはまだダウンロードされません。 –
この問題の一時的な解決方法をお探しですか? – coneybeare
私はそれがセキュリティ問題のために不可能だと思います。可能であれば、事実上、1回のクリックで無限のポップアップ/ダウンロードを開くことができます。 –