-1

Google Chrome 拡張機能の開発です。コンテンツ スクリプトを使用して Web ページに挿入しています。ただし、一部の Web ページには、コンテンツを動的に変更する独自の ajax スクリプトがあります。スクリプトが完了する前に正しいコンテンツを取得できないため、そのようなスクリプトが完了するまで待つにはどうすればよいですか?

例えば、

1- Google 検索結果ページで、

2- すべての検索結果項目のタイトルに「テキスト」を追加したいのですが、これは呼び出しで簡単に実行できます。

$('h3').append("text");

3- 次に、検索クエリの変更をリッスンします。

$('input[name="q"]').change( function(eventObj){
    console.log("query changed");
    // DOESN'T work
    $('h3').append("text");
});

最後の行が機能しないのは、おそらく実行時にページがまだ更新中で$('h3')あり、利用できないためです。ページでクエリが変更されると、Google は ajax を使用して検索結果を更新します。

問題は、この変更をキャプチャし、毎回「テキスト」を正常に追加できるようにする方法です

編集:

試してみましたが、うまくいきませんでした:

$('h3[class="r"]').delay(1000).append("text");

使用すること.delay()はあまり好まれません。

編集:

.delay()UI 効果以外のスクリプトの実行の一時停止を解決するようには設計されていません。回避策は

$('input[name="q"]').change(function(eventObj) {    
    setTimeout(function() {
      $('h3[class="r"]').append(" text");
    }, 1000);
});

しかし、前setTimeout()に述べたように、接続速度に依存し、(スクリプトの) 待機時間と応答速度のバランスを手動で調整する必要があるため、好ましくありません。

この投稿は神が知っていることに反対票を投じていますが、なぜ私はまだエレガントな答えを待っているのですか.

4

1 に答える 1

1

おそらくjQuery 1.7+(または「ライブ」または「デリゲート」を使用する古いバージョン)

$('form').on( "change", 'input[name="q"]', function(eventObj){
    console.log("query changed");
    $('h3').append("text");
});

formが別の要素である場合は、それに応じて変更します。

于 2012-08-31T10:31:37.283 に答える