1

次のコードを使用して、画像のサイズを取得します。

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を使用してスタイルを変更しようとしましたが、違いはありません。したがって、これが「ランダムに」失敗する理由がわかりません。

よろしくお願いします。

4

1 に答える 1

1

showDialog();わかりました。常に正しく起動すれば、画像の読み込みとレンダリングの遅延が除外されます。

グリッチを引き起こしている可能性のある他のいくつかのこと:

  1. 他の CSS が の CSS をオーバーライドしていますmarkImage()。コードを次のように変更します。

    img.style.setProperty ("border", "7px solid #990099", "important");
    
  2. ページには、ターゲット イメージを変更またはリロードする JS があります。必要に応じて、そのような JS の後にインターセプト、ブロック、またはクリーンアップします。


常に正しく発砲するとは限らないshowDialog();場合 、それは別の球技ですが、そうではないことをあなたは指摘しました。

何か他のことが起こっているかどうかは、ターゲット ページと、おそらく GM スクリプト全体を見ないとわかりません。それらにリンクします。

于 2012-05-15T20:02:05.870 に答える