Firefox 扩展内容脚本在临时加载项加载期间不加载

Firefox extension content script does not load during temporary add-on load

我正在开发一个涉及后台脚本和内容脚本的扩展。当用户点击扩展的相关菜单项时,内容脚本从网页中获取选定的文本,然后将其发送到后台脚本进行进一步处理。

这里是manifest.json的相关部分:

"background": {
    "scripts": ["background.js"]
  },
  
  "content_scripts": [
  {
    "matches": ["<all_urls>"],
    "js": ["content.js"]
  }
]

我在 about:debugging > This Firefox > Load Temporary Add-on... 中加载扩展以测试它。

在代码中,我从后台脚本向内容脚本发送了一条消息,但会引发错误:

Uncaught (in promise) Error: Could not establish connection. Receiving end does not exist

我使用调试器在 about:devtools-toolbox 中进行了检查,发现只有后台脚本加载。

有没有人知道是什么导致内容脚本加载失败,解决方案是什么?

后台脚本应向内容脚本发送一条消息,询问所选文本,然后收听它收到的消息。然后它可以调用执行 Google 搜索的函数:

function onCreated() {
  if (browser.runtime.lastError) {
    console.log(`Error: ${browser.runtime.lastError}`);
  } else {
    console.log("Item created successfully");
  }
}

browser.menus.create({
  id: "context-entry",
  title: 'search',
  contexts: ['all'],
  onclick: getText
}, onCreated);

async function getText() {
  const tabInfo = await getCurrentTab();
  const [{ id: tabId }] = tabInfo;
  browser.tabs.sendMessage(tabId, { trigger: 'getText' });
}

browser.runtime.onMessage.addListener(function ({ txt }) {
  doSearch(txt);
});

function doSearch(txt) {
  var searchURL = `https://www.google.com/search?q=${txt}`;
  browser.tabs.create({url: searchURL});
}

并且内容脚本应该监听来自后台脚本的消息,并将选定的文本发回。

browser.runtime.onMessage.addListener(({ trigger }) => {
  if (trigger === 'getText') {
    const selection = window.getSelection();
    const txt = selection.toString();
    browser.runtime.sendMessage({ trigger: 'foundText', txt });
  }
});