javascript - chrome.webNavigation.onCompleted - 多次触发事件

标签 javascript google-chrome-extension

我加载 plagin 以将代码注入(inject)页面, list 代码:

{
  "name": "any",
  "version": "1.0",
  "permissions": [
    "webNavigation",
    "*://*/*" 
  ],
  "background": {
    "scripts": ["background.js"],
    "persistent": false
  },
  "manifest_version": 2
}

和 background.js:

chrome.webNavigation.onCompleted.addListener(function(details) {
    chrome.tabs.executeScript(details.tabId, {
        code: 'console.log("A")'
    });
});

问题是页面加载后事件触发了几次,我只想要事件一次。我的错误是什么? 我将不胜感激。

最佳答案

chrome.webNavigation.onCompleted 即使在子框架中出现导航时也会被调用。仅捕获一次的一种方法是使用帧 ID 条件来实现您的代码。 frame id = 0 对应于父框架。你的代码看起来像:

chrome.webNavigation.onCompleted.addListener(function(tab) {
    if(tab.frameId==0){
    //logic
    }
});

此处提供详细文档:https://developers.chrome.com/extensions/webNavigation

关于javascript - chrome.webNavigation.onCompleted - 多次触发事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37779142/

相关文章:

javascript - document.body 返回 iframe 主体

javascript - 如何制作仅在设置标志时监听事件的 webRequest 事件页面?

javascript - 将最后一个元素移动到数组中第二项的最快方法

javascript - 使 Material 选项卡可滚动

javascript - react 子调用父方法无法访问状态

javascript - 仅使用 javascript 更改 li 中每个第一个单词的颜色

javascript - 如何从 Web Worker 访问 chrome.history?

javascript - 将变量从 Chrome 扩展程序传递到打开的选项卡

google-chrome - 在 OWN 浏览器中禁用刷新/后退/前进

c# - 无法异步使用 Ajax.BeginForm() 上传文件