我将Inject代码的plagin加载到页面,清单代码:
Vector3.Reflect()
background.js:
{
"name": "any",
"version": "1.0",
"permissions": [
"webNavigation",
"*://*/*"
],
"background": {
"scripts": ["background.js"],
"persistent": false
},
"manifest_version": 2
}
问题是在页面加载后触发了几次事件,我希望事件只有一次。我的错是什么? 我将不胜感激任何帮助。
答案 0 :(得分:1)
最佳做法是使用 命名函数 ,并在准备就绪时注册它们,并且从性能的角度来看,仅对请求的URL(如果可能)进行注册。 在下一个示例中,只有在过滤器包含URL的情况下,监听器才会在注册之前被删除:
if (filter.url.length < 1) {
resolve(dictionary);
return;
}
if (chrome.webNavigation.onBeforeNavigate.hasListener(onBeforeNavigate))
chrome.webNavigation.onBeforeNavigate.removeListener(onBeforeNavigate);
chrome.webNavigation.onBeforeNavigate.addListener(onBeforeNavigate, filter);
,命名者应遵循以下模式:
const onBeforeNavigate = (details) => {
if (details.frameId > 0)
return;
...
}
在此处查看更多信息: https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webNavigation/onCompleted
答案 1 :(得分:0)
chrome.webNavigation.onCompleted。仅捕获一次的一种方法是使用框架ID条件实现代码。 frame id = 0对应于父帧。您的代码如下:
chrome.webNavigation.onCompleted.addListener(function(tab) {
if(tab.frameId==0){
//logic
}
});
可在此处找到详细文档:https://developers.chrome.com/extensions/webNavigation