1

時間の経過とともにAJAX呼び出しによって変更されるWebページ上のアイテムを考えると、変更が発生するたびに、ユーザースクリプトはどのようにしてそれらの変更について通知を受けることができますか?

Facebookのニュースフィードを想像してみてください。ページをロードすると、12個のアイテムが含まれます。これらのアイテムは、<li>内に含まれるタグでラップされます<ul>。ページを下にスクロールすると<li>、データの新しいチャンクがそのページに読み込まれ<ul>ます。

このような変更をユーザースクリプトに通知するにはどうすればよいのでしょうか。

1つのアイデアは、常にそれを照会し<ul>、そのアイテムを数え、その数が大きくなるかどうかを確認することです。可能ですが、変更が発生したときにそれを正しくキャッチするには、頻繁に実行する必要があるため、コストがかかりすぎる可能性があります。

もう1つのアイデアは、どのスクロール位置がロードをトリガーするかを把握し、そのような変化を監視することです。安価ですが、非常に具体的です。

3番目のオプションがあるかどうか疑問に思います。 変更が発生するたびに、変更を通知するもの。私はフィードだけでなく、より一般的にこの概念にも興味があります。AJAX呼び出しによって変更されるページ上のアイテムを考えると、どのようにしてそれらの変更についてユーザースクリプトに通知することができますか?

4

3 に答える 3

3

sendメソッドを乗っ取る

var oldSend = XMLHttpRequest.prototype.send;
XMLHttpRequest.prototype.send = function(){
    // do what you need; then send the request
    oldSend.apply(this, arguments);
}
于 2012-05-31T06:05:44.757 に答える
1

あなたが探しているのはDOMSubtreeModifiedイベントだと思います。

これは、FirefoxChromeおよびIE>= 9で機能します。Facebookでのスクリプトが、greasemonkey / chrome拡張機能であると推測している場合はどうでしょうか?その場合、これは問題ないはずです。

このイベントは、子ノードが追加、削除、または変更されるたびにノードで発生します

あなたはそれを使用することができます

.addEventListener ("DOMSubtreeModified", handler, useCapture);

しかし、attachEventでは機能しないと思います。

これについての詳細があります。

http://help.dottoro.com/ljrmcldi.php

于 2012-05-31T07:00:52.863 に答える
0

ページのコンテンツを更新しているAjax呼び出しにアクセスできますか?一般的に、より良いアプローチは、実際のAjaxコールにコールバックをアタッチすることです。

リクエストがJqueryで行われている場合は、$。ajaxComplete()または$ .ajaxSuccess()を使用してコードをトリガーします。これらはリクエストが完了するたびに起動するため、これが発生したときに、コンテンツが変更されたかどうかを高額になることなく確認できます。

$.ajaxSuccess(function() { //check for update and do something });
于 2012-05-31T06:06:09.977 に答える