1

Twitter用のChrome拡張機能を作成しようとしていますが、ページのレイアウトを少し変更したいと思います。私はたくさんのことを試し、グーグルで検索しましたが、役に立ちませんでした。

トレンドとフッターの間にdivを追加したいと思います。ただし、Twitterはこれらの要素をajaxで生成しているように見えるため、$(document).ready関数を使用している場合でも、コードの実行時には存在しません。

私がそれを機能させる唯一の方法は、コードをsetTimeout関数に1〜2秒間置くことです。これはかなり信頼性の低い解決策のように思われるので、この問題について助けていただければ幸いです。

前もって感謝します!

4

2 に答える 2

2

これを行う方法は、バックグラウンドページを作成し、それを使用して呼び出すこと chrome.extension.getBackgroundPage(). です。ajaxリクエストが完了したら、ポップアップページを微調整できます。バックグラウンドページにパラメーターを送信する必要がある場合は、次のようにバックグラウンドページにリスナーを追加する必要があります。

================
chrome.extension.sendRequest({greeting: "hello"}, function(response) {
  console.log(response.farewell);
});


===============
chrome.extension.onRequest.addListener(
  function(request, sender, sendResponse) {
          sendResponse({farewell: "goodbye"});
  });

メッセージパッシングの詳細については、メッセージパッシングを参照してください

本当にこれをすべてやりたくない場合は、パラメーターをfalseに設定することで、同期的にuseajaxリクエストを呼び出すことができます。

xmlhttp.open("GET","url",false);

ただし、これは良い習慣ではないので、強くお勧めします。これで問題が解決することを願っています。

于 2012-06-11T03:33:27.877 に答える
1

各AJAXリクエストの後に、いくつかのDOM要素が配置されているかどうかをチェックすることは、(あなたが行ったように)1〜2秒ごとに同じことをチェックするよりもはるかに優れてsetTimeoutいます。

はるかに良い方法は、DOMNodeInsertedイベントを使用することです。正しく設定すると(適切な要素に追加すると)、待機している要素がDOMに挿入されるたびに通知されます。イベントが発生した後は、パフォーマンスの問題removeEventListenerでミューテーションイベントが知られているため、イベントを削除することを忘れないでください( ) 。

于 2012-06-11T07:12:23.563 に答える