5

我有一个 chrome 扩展程序,它在网站上进行了一些更改(编辑评论)。

在网站上最近的更改(网站不是我的)之后 - 使用 ajax 加载评论块(在它是整个页面重新加载的简单发布请求之前)。

现在,如果我第一次加载页面 - 内容脚本可以工作,但是当我转到下一页时,比如说第 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 回答