内容脚本无法调用函数。Firefox 扩展,清单 v2

Content Script Can't Call Functions. Firefox Extensions, manifest v2

提问人:xyz 提问时间:11/5/2023 最后编辑:xyz 更新时间:11/6/2023 访问量:37

问:

我有一个加载到 Firefox 中的临时扩展,它运行,运行函数,但还有另一个函数它不会运行。不运行的函数只能在刷新页面时运行,而不能在新打开的 URL 时运行。main.js

let exampleArray = ['exampleItem1', 'exampleItem2'];
function foo(){
    let n = 0;
    exampleArray.forEach((element) => {
        /* code */
    });
    let msg = `example text: ${n}`;
    console.log(msg);
}
if (document.readyState === "complete"){
    foo();
} else {
    setTimeout(() => {
        foo();
    },5000);
}
// only main() is executed, unless the page is refreshed instead of loading a new URL
function main(){
    let exampleInterval = setInterval(()=>{
        /* more code goes here */
    },200);
}
main();

我试过用另一种方式打电话,也没有用foo()

if (document.readyState === "complete"){
    foo();
} else {
    document.addEventListener("DOMContentLoaded", () => {
        foo();
    });
}

这也不起作用^
这是我的清单:

{
    "manifest_version": 2,
    "version": "1.0",
    "name": "example extension",
    "icons": {
        "16": "img.png",
        "48": "img.png",
        "128": "img.png"
    },
    "permissions": ["activeTab", "contextMenus"],
    "background": {
        "scripts": ["background.js", "examplescript.js"],
        "persistent": false
    }
    "content_scripts": [
        {
            "matches": ["https://www.example.com/*"],
            "js": ["main.js"]
        }
    ]
}

只能在脚本中运行,我不能运行脚本中以外的其他函数。刷新页面会运行它,但是如果我单击另一个链接并加载页面,它不会运行,只会运行函数。

编辑:似乎它执行得太快了,所以我需要一种方法,只有在所有内容加载完毕时才开始。
main()main.jsmain()main.jsmain()

JavaScript 浏览器 firefox-addon

评论


答:

0赞 xyz 11/6/2023 #1

我想出了一些行之有效的东西。我想在这里写下我的答案,以防其他人遇到这个问题。

我将以下代码行添加到我的文件中:
background.js

browser.tabs.onUpdated.addListener((id, change, tab) => {
    /* code goes here */
});

然后,我还编辑了我的清单以使其正常工作:

"permissions": ["activeTab", "contextMenus", "scripting", "https://www.example.com/*"]