Chrome扩展中的service_worker脚本出错

4smxwvx5  于 2023-04-03  发布在  Go
关注(0)|答案(2)|浏览(577)

我正在构建一个chrome扩展,我需要在标签更改时从background.js向content.js发送消息,但每次都失败。
我在Chrome的扩展选项卡上看到以下错误-

以下是我的清单文件的外观-

{
  "manifest_version": 3,
  "version": "1.0",
  "action": {
    "default_popup": "popup.html",
    "default_icon": {
      "16": "icon16.png",
      "48": "icon48.png",
      "128": "icon128.png"
    }
  },
  "background": {
    "service_worker": "background.js"
  },
  "content_scripts": [
    {
      "matches": ["<all_urls>"],
      "js": ["content.js"]
    }
  ],
  "permissions": [
    "tabs"
  ],
  "icons": {
    "16": "icon16.png",
    "48": "icon48.png",
    "128": "icon128.png"
  }
}

Background.js

chrome.tabs.onActivated.addListener((tabId, tab) => {
  //Sends a message to the active tab
  chrome.tabs.sendMessage(tabId, {
    type: "NEW",
  });
});

Content.js

chrome.runtime.onMessage.addListener((obj, sender, response) => {
    const { type, value } = obj;

    if (type === "initObserver") {
      initObserver;
    }
  });
p4tfgftt

p4tfgftt1#

不要向新选项卡或以chrome://开头的选项卡发送消息,因为无法注入内容脚本。
background.js

chrome.tabs.onActivated.addListener((activeInfo) => {
  chrome.tabs.get(activeInfo.tabId, (tab) => {
    if (tab.url == "") return;
    if (tab.url.startsWith("chrome://")) return;
    //Sends a message to the active tab
    chrome.tabs.sendMessage(activeInfo.tabId, {
      type: "NEW",
    });
  })
});
wztqucjr

wztqucjr2#

1.调用错误意味着sendMessage的一个参数不正确,但它不会发生在问题中当前发布的代码中,因此显然这是一个旧错误。单击垃圾桶图标将其删除。
1.在重新加载或安装/更新扩展程序后,您需要将内容脚本显式注入到当前打开的标签页中,因为Chrome不会自动执行此操作,example
1.会有一些标签无法运行内容脚本,例如其他扩展或chrome://页面以及通过全局runtime_blocked_hosts policy禁止您的扩展的网站。您可以抑制和忽略连接错误,这样它就不会污染日志:

const PORT_RE = /Receiving end does not exist|The message port closed before/;
const ignorePortError = e => !PORT_RE.test(e.message) && Promise.reject(e);

chrome.tabs.onActivated.addListener((tabId, tab) => {
  chrome.tabs.sendMessage(tabId, {
    type: "NEW",
  }).catch(ignorePortError);
});

相关问题