0

画像のサイズを変更するフォーラムのユーザー スクリプトを作成しました。リダイレクトする場所を投稿または編集した後onreadystatechange、Google Chrome で発火しない場合を除いて、うまく機能します。

スレッド EG SomeSite/forums.php?action=viewtopic&topicid=205362を表示すると、ユーザースクリプトが機能します。

編集/投稿後、EG SomeSite/forums.php?action=viewtopic&topicid=205362&page=p4976670#4976670、ユーザースクリプトが機能しません。

問題は次のコードにあります。

document.onreadystatechange = function () {
if (document.readyState == "complete") {
    //Call function
}};

すべてのリソースが読み込まれるのを待ちます。そうしないと、多くの画像を含むページではサイズ変更に一貫性がないためです。

このスクリプトは、Firefox と Greasemonkey で完全に動作します。

onreadystatechangeリダイレクト後に Chrome で起動しない理由はありますか? リソースがロードされるのを待つより良い方法はありますか?

4

1 に答える 1

0

@run-atパラメータを使用するかどうかは述べていませんが、デフォルトでは、Chrome のユーザー スクリプトはいつ起動するかについて多少不安定です。
つまり、ユーザー スクリプトはonloadイベントの前に発生する場合もあれば、後で発生する場合もあります (既定では)。onloadイベントの後である場合は、onreadystatechangeトリガーされません。

この動作に適応するには、メタデータ ブロック// @run-at document-endに追加するか、そのコード スニペットを次のものに置き換えます。

window.addEventListener ("load", YourMainFunction, false);
if (document.readyState == "complete") {
    YourMainFunction ();
}

function YourMainFunction {
    // DO ALL YOUR STUFF HERE...
}


後者の場合、YourMainFunction()は load イベント ( と同じreadyState == "complete") を待機するか、イベントが既に渡されている場合はすぐに起動します。 YourMainFunction()いずれの場合も 1 回だけ実行されます。

于 2012-07-22T00:54:17.540 に答える