2

私は Facebook 用の Userscript を作成しましたが、同様の通知がグループ化されています。今、私が持っていた古い通知を含む静的な HTML ページだけを使用すると、スクリプトは 100% 機能します。

問題は次のとおりです。デフォルトで通知を保持する DIV には、ユーザーが [通知] ボタンをクリックするまで通知がありません。onclickFacebook には、DIV (通知メニュー) を表示し、AJAX を使用して通知を取得するインラインイベントがあります。私のユーザースクリプトは起動時にのみ実行されるため、そこには何も見つかりません。ページには影響しません。.click() イベントを使用してみましたが、[通知] ボタンをクリックするとコードが実行されます。問題は、Facebook がまだ通知の AJAX 要求を実行していることです。つまり、スクリプトが動作するための通知がまだないため、効果がありません。

ユーザーが前に通知を表示し、その後突然通知を表示する必要がないため、一般的な setTimeout を使用したくありません。DIV を監視して、通知が追加されたら実行する方法はありますか? それとも、Facebook が AJAX リクエストを終了したら、私のコードを実行するのでしょうか?

4

3 に答える 3

1

div の innerHTML を監視できsetInterval()ます。データが入力されたら、実行できます。

于 2010-06-20T00:33:39.117 に答える
0

問題は次のとおりです。デフォルトで通知を保持するDIVには、ユーザーが[通知]ボタンをクリックするまで通知がありません。Facebookには、DIV(通知メニュー)を表示し、AJAXを使用して通知を取得するインラインonclickイベントがあります。

..。

ユーザーが通知を前に表示してから突然表示する必要がないため、汎用のsetTimeoutを使用したくありません。通知が追加されると実行されるようにDIVを監視する方法はありますか?

はいあります:

var notificationDiv = document.getElementById(...);
var lastTimeoutID = null;
var main = function(evt){
  // evt.target is the inserted element
  // if you expect more elements, then do the following:
  lastTimeoutID = setTimeout(function(){
    lastTimeoutID = null;
    // uncomment below block if you only need to do the work once.
    /*
    notificationDiv.removeEventListener("DOMNodeInserted", main, false);
    */

    // do your work here.
  }, 500); // waiting 500ms for next element to be added, otherwise doing work.
  if (lastTimeoutID) {
    clearTimeout(lastTimeoutID);
    lastTimeoutID = null;
  }
};
notificationDiv.addEventListener("DOMNodeInserted", main, false);

上記のタイムアウトコードはすべて、ユーザースクリプトが実行している内容に応じて削除できる場合があります。

于 2010-06-22T20:36:20.183 に答える
-1

setTimeout ループを追加できるかもしれません。何かのようなもの

setTimeout(function(){
/* check for divs */

if(/* divs are found */){
//apply code
}
else {
setTimeout(/* loop again */);
}

},1000);
于 2010-06-20T00:32:31.743 に答える