ここでの回答に従って、配列内のすべての画像の読み込みが完了したときに(.completeを使用して)待機してからメッセージを取得しようとしています。そのため、以下のような無限ループを設定しました。ただし、これを実行すると、checkForAllImagesLoaded()が定義されていないというエラーが発生します。このコードはブックマークレットを介して実行されているため、すべて匿名関数構造にラップされています(以下を参照)。その構造の外で関数と変数を再定義すると、機能します。しかし、それはブックマークレットを書くための悪い方法のようです。setTimeout後も関数を認識できるように、これを修正するにはどうすればよいですか?
(function() {
//var images = array of images that have started loading
function checkForAllImagesLoaded(){
for (var i = 0; i < images.length; i++) {
if (!images[i].complete) {
setTimeout('checkForAllImagesLoaded()', 20);
return;
}
}
}
checkForAllImagesLoaded();
})();