次のコードを使用して、画像のサイズを取得します。
function getFileSize(img) {
GM_xmlhttpRequest({
url: img.src,
method: "HEAD",
onload: function(response) {
response.responseHeaders.match(/Content-Length: (\d+)/);
size = RegExp.$1;
if (size > maxS)
// If size > max. allowed size
markImage(img);
else if (img.height > maxH)
// If img.height > max. allowed height
markImage(img);
}
});
}
ご覧のとおり、上記の関数はmarkImageを呼び出します。
function markImage(img) {
img.style.border = "7px solid #990099";
showDialog(); // This function shows a dialog
}
そこで、特定の条件に一致する画像のスタイルを変更したいと考えています。
イメージが getFileSize の条件に一致する場合、markImageで呼び出されるダイアログが正しく表示されます。ただし、スタイルは常に変更されるわけではありません。
私が見る限り、スクリプトは の場合は完全に機能しますsize > maxS
が、 の場合は常に機能するとは限りませんimg.height > maxH
。実際、img.height > maxH
ウェブサイトを更新するとスクリプトは機能しますが、最初の試行では機能しません。
一方では、markImageがonloadと呼ばれているという事実を考慮すると、これは同期に関連する問題ではないようです。さらに、ダイアログを表示する必要があるときに、ダイアログが正しく表示されます。一方、setAttributeを使用してスタイルを変更しようとしましたが、違いはありません。したがって、これが「ランダムに」失敗する理由がわかりません。
よろしくお願いします。