Chrome 拡張機能で JavaScript を使用して、一度に複数の画像をダウンロードしようとしています。これを行うには、各画像でクリックを発生させたいと思います (それぞれがダウンロード属性とクラス "clickit" を持つ href タグにラップされています)。アイデアは、clickit クラスを使用して各 href をループし、マウス クリックを起動して、画像をダウンロードすることです。
次のコードは、n = 25 のイメージのうち最初の 1 つだけをダウンロードしますが、25 回呼び出されます (コンソール ログは、その回数だけ「取得」されます)。
var evt = document.createEvent("MouseEvents");
evt.initMouseEvent("click", true, true, window,
0, 0, 0, 0, 0, false, false, false, false, 0, null);
[].forEach.call( document.getElementsByClassName("clickit"), function(elem){
console.log("got here");
elem.dispatchEvent(evt);
});
別の方法を試しましたが、このコードはほとんどすぐにクロムをクラッシュさせます (ログに KERN_PROTECTION_FAILURE をスローします):
for (var i = 0; i < document.getElementsByClassName("clickit").length; i++){ var clickEvent = document.createEvent("MouseEvents"); clickEvent.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); document.getElementsByClassName("clickit")[i].dispatchEvent(clickEvent); }
どちらの場合も、dispatchEvent() 関数を間違って使用しているように感じますが、指を置くことはできません。最初のケースでは、単一の画像を適切に取得できることが励みになります。2番目のケースでは、メモリアクセスが悪い領域に陥っているように感じます。
何か案は?