Firefox 扩展:尝试向内容脚本发送消息会引发错误

Firefox extension: Attempting to message content script throws an error

提问人:Ralf_Reddings 提问时间:11/8/2023 更新时间:11/8/2023 访问量:18

问:

我花了一整天的时间试图弄清楚这个问题,但我似乎一无所获,有人可以和我分享我哪里出错了吗?

我正在尝试弄清楚如何正确发送消息,从“后台”脚本到内容脚本。我想用作触发事件,以便在发生时将消息发送到内容脚本以从页面 DOM 中获取一些信息。onBeforeRequest()

此示例中不存在 DOM 部分,我正在努力建立一个有效的消息传递模式。

清单文件:

{
    "name": "shell",
    "manifest_version": 2,
    "version": "1.0",

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

background.js 文件:

activeTab = browser.tabs.query({currentWindow: true,active: true,})

function sendMessageToTabs(activeTab) {
    for (const tab of activeTab) {
      browser.tabs.sendMessage(activeTab.id, { greeting: "Hi from background script" })
         .then((response) => {
            console.log("Message from the content script:");
            console.log(response.response);
         })
         .catch(onError);
    }
 }
browser.webRequest.onBeforeRequest.addListener(sendMessageToTabs, {urls:["https://en.wikipedia.org/wiki/Vehicle"]});

内容.js文件:

"use strict";

browser.runtime.onMessage.addListener((request) => {
  console.log("Message from the background script:");
  console.log(request.greeting);
  return Promise.resolve({ response: "Hi from content script" });
});

如何触发事件

加载扩展后,我可以通过访问维基百科的汽车页面并单击文章个人资料图片下方的车辆部分来触发打开,如下所示 这里.onBeforeRequest()

我遇到的问题

当事件触发时,我在 DevTools 控制台中收到错误:

TypeError: activeTab is not iterable

我尝试了多种方法来解决这个问题,但它仍然存在。任何帮助或指示都会很棒。干杯。

javascript firefox google-chrome-extension firefox-addon web-extension

评论

0赞 wOxxOm 11/8/2023
activeTab是一个 ,而不是一个数组。您可以使用 ,但有一个更大的问题:1) onBeforeRequest 侦听器使用完全不同的信息调用,该信息已经包含 ,2) 当调用 onBeforeRequest 时,选项卡包含旧页面,因此您可能希望使用不同的事件,例如 webNavigation.onCompleted。PromiseactiveTab.then(sendMessageToTabs)tabId

答: 暂无答案