5

サイトにいくつかの変更を加えるChrome拡張機能があります(コメントの編集)。

サイトの最近の変更後(サイトは私のものではありません)-コメントブロックはajaxを使用してロードされます(ページ全体がリロードされる単純なPOSTリクエストの前)。

これで、最初にページをロードすると(コンテンツスクリプトは機能しますが、次のページ、たとえばページ#2に移動すると)、コメントはajaxを使用して追加され、拡張スクリプトは実行されなくなります。したがって、コメントは私が望むように変更されません。

ページ変更DOMをリッスンし、拡張スクリプトを再度適用する簡単な方法はありますか?

マニフェストファイルに私が持っている:

{
  "name": "Name",
  "version": "1.0",
  "description": "Description",
  "icons": {"16":"16.png",
            "48":"48.png",
            "32":"32.png",
            "128":"128.png"},
  "browser_action": {
    "default_title": "Default title",
    "default_icon": "48.png",
    "popup": "popup.html"
  },
  "permissions": [
    "tabs",
    "http://www.site.com/*",
    "notifications",
    "unlimitedStorage"
  ],

  "options_page": "options.html",
  "background_page": "background.html",

  "content_scripts": [
                {
                    "matches": ["http://www.site.com/*","https://www.site.com/*"],
                    "js": ["jquery-1.7.1.min.js","content.js"],
                    "run_at": "document_end"
                }]
}
4

1 に答える 1

8

と呼ばれるイベントにリスナーを追加できますDOMSubtreeModified。関数をそれにバインドすると、変更があるたびに呼び出されます。

jQueryの場合:

$('#ContentContainer').bind('DOMSubtreeModified',modifyComments);

アップデート:

イベントが複数回発生している場合は、最初にイベントバインディングを削除し、一定のタイムアウト後に、modifyCommentsを呼び出してイベントを再バインドできます。

function DOMModificationHandler(){
    $(this).unbind('DOMSubtreeModified.event1');
    setTimeout(function(){
        modifyComments();
        $('#ContentContainer').bind('DOMSubtreeModified.event1',DOMModificationHandler);
    },1000);
}

//after document-load
$('#ContentContainer').bind('DOMSubtreeModified.event1',DOMModificationHandler);
于 2012-06-18T14:25:16.317 に答える