AJAX で作成されたノードを検出する場合のオプション (除外するのが賢明な Mutation イベント以外) は次のとおりです。
- 間隔またはタイマーによるポーリング。
- ページの AJAX リクエスト (存在する場合) にフックしようとしています。
- ページの JavaScript へのスプライシング、ハイジャック、または置き換え。
私はこれらすべてを一度に実行しましたが、1 つを除くすべてに大きな欠点があります。
- ページの JavaScript へのスプライシングは、(特に無名関数の場合) 必ずしも簡単ではなく、通常はそのコードの複雑な分解が必要であり、非常に脆弱です。ページの JavaScript は予告なしに変更されます。
- ページの AJAX 要求にフックするのは非常に簡単な場合もありますが、サンドボックス バリアを越えて情報を転送することは、通常、価値があるよりも面倒です。
- ポーリングは実際にはうまく機能し、実装が簡単で、通常は低コストです。
waitForKeyElements() ユーティリティを使用して、それを完了することをお勧めします。使い方はとても簡単です。例えば:
// ==UserScript==
// @name Highlight good comments
// @include http://SOME_SITE/*
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
// @require https://gist.github.com/raw/2625891/waitForKeyElements.js
// ==/UserScript==
function highlightGoodComments (jNode) {
if (/beer/i.test (jNode.text () ) ) {
jNode.css ("background", "yellow");
}
}
waitForKeyElements ("#userBlather div.comment", highlightGoodComments);