【问题标题】:Detect frame change or re-run content script on frame reload?在帧重新加载时检测帧更改或重新运行内容脚本?
【发布时间】:2023-12-30 11:29:01
【问题描述】:

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

直接链接到页面时 - 一切正常。但是,如果我通过任何其他页面导航到我的脚本应该执行并且 pageAction.show 应该触发的页面 - 它不会。我相信这与如何从站点导航中加载页面有关。我想知道是否有办法检测重新加载/刷新并“强制”我的脚本触发。否则,最佳实践将在这里受到赞赏。谢谢!

编辑:我不认为它是 iFrame。我什至不确定“框架”是否是正确的词。该网站只是有一个...非常动态的加载方法?不知道正确的术语是什么,但不管它是什么,它都与我的代码大相径庭。

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

【问题讨论】:

    标签: javascript jquery google-chrome-extension frame


    【解决方案1】:

    你可以选择 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 节点,它就会执行代码。

    【讨论】:

    • 我认为它不是 iFrame。我什至不确定“框架”是否是正确的词。该网站只是有一个...非常动态的加载方法?不确定正确的术语是什么。
    • 我猜您想检查 dom 树中是否有任何更改。
    • 遇到一些意想不到的(对我来说)行为。当使用此 (pastebin.com/c7m3wXcf) 代码加载内容脚本时,没有任何反应。但是,如果我刷新然后四处导航,它就会开始触发。但它只是拒绝在第一次这样做。也许我在这里遗漏了一些重要的东西。
    最近更新 更多