提问人:xyz 提问时间:11/5/2023 最后编辑:xyz 更新时间:11/6/2023 访问量:37
内容脚本无法调用函数。Firefox 扩展,清单 v2
Content Script Can't Call Functions. Firefox Extensions, manifest v2
问:
我有一个加载到 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.js
main()
main.js
main()
答:
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/*"]
评论