Ajax加载后重新初始化内容脚本?

时间:2015-03-14 19:27:25

标签: javascript ajax google-chrome-extension dynamically-generated

在我的内容脚本中,我将浏览整个DOM并对所有<img>元素执行某些操作。

我在onUpdated中使用Background.js检查选项卡何时打开然后执行脚本。

chrome.tabs.onUpdated.addListener(function(tabId, info, tab) { 
        chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
            if(info.status == "complete") {
                chrome.tabs.sendMessage(tabs[0].id, function (response) {
                   // send data to content script etc.
                });
            }
        });
}

这适用于没有动态加载的内容 - 例如,在Facebook新闻Feed中,它会按照我想要的方式执行最初可见的所有图像 - 但是当我向下滚动时,新故事/照片等被加载(使用AJAX?不确定),当然这些<img>元素不受我的内容脚本的影响。

我如何重新加载(或调整会更好,因为我必须搜索整个DOM并且速度慢)我的内容脚本才能适用于这个新调整的DOM?我在这里找不到任何标签方法 - https://developer.chrome.com/extensions/tabs提到这个问题。

尝试:

  • all_frames : true中添加manifest无效。
  • 删除info.status条件也没有任何作用。

1 个答案:

答案 0 :(得分:1)

您需要监控页面以插入新图像,例如使用MutationObservermutation-summary库。 tabs事件不会触发像这样的页面更改。

有关方法的讨论,请参阅this question