在重新加载框架时检测框架更改或重新运行内容脚本?

Detect frame change or re-run content script on frame reload?

我正在通过 Chrome 扩展在 particular website 上执行一些代码。我的代码应该只在网站的某些页面上执行。这包括仅在某些页面上调用 pageAction.show,以及仅在某些页面上调用内容脚本。

直接链接到页面时 - 一切正常。但是,如果我通过任何其他页面导航到我的脚本应该执行并且 pageAction.show 应该触发的页面 - 它不会。我相信这与从站点导航中加载页面的方式有关。我想知道是否有办法检测要触发的 reload/refresh 和 "force" 我的脚本。否则,这里将不胜感激最佳实践。谢谢!

编辑: 我不认为它是 iFrame。我不确定 "Frame" 是否正确。该网站只有一个...非常动态的加载方法?不确定正确的术语是什么,但不管它是什么,我的代码 bigtime。

编辑 2: 遇到一些(对我而言)意想不到的行为。当内容脚本加载此 (pastebin.com/c7m3wXcf) 代码时,没有任何反应。但是,如果我刷新然后四处导航,它就会开始启动。但它只是第一次拒绝这样做。也许我在这里遗漏了一些重要的东西。

你可以选择 Mutation Observers:

// select the target node
var target = document.documentElement;

// create an observer instance
var observer = new MutationObserver(function(mutations) {
    mutations.forEach(function(mutation) {
        // put your code here "pageAction.show" 
    });
});

// configuration of the observer:
var config = { attributes: true, childList: true, characterData: true }

// pass in the target node, as well as the observer options
observer.observe(target, config);

// later, you can stop observing
observer.disconnect();

此代码的作用是观察 DOM 树,如果有任何更改,例如 dom 节点的 creation/deletion,它会执行代码。