Chrome / Firefox扩展-内容脚本不监听消息

Chrome / Firefox extension - Content script not listening for messages

本文关键字:脚本 监听 消息 Firefox 扩展 Chrome      更新时间:2023-09-26

我正在为Chrome和Firefox开发扩展,并且我遇到了一个问题。

基本上,我试图得到一个内容脚本来听消息使用chrome.runtime.onMessage.addListener(...),但它似乎不工作。

我通过从内容脚本发送消息来测试它。背景脚本(ml.js)有一个工作正常的侦听器,但是内容脚本中的侦听器没有得到消息。

您可以在这个Gist(或下面)中查看代码。

manifest.json:

{
    "manifest_version": 2,
    "name": "Messaging Extension",
    "version": "1.0.0",
    "background": {
        "scripts": ["ml.js"]
    },
    "content_scripts": [
        {
            "matches": ["*://*.google.co.uk/*"],
            "js": ["cs.js"],
            "run_at": "document_end"
        }
    ]
}

ml.js:

// When receive message...
chrome.runtime.onMessage.addListener(function(message) {
    if (message.key) {
        console.log('ML: First message received')
        // Send another message
        chrome.runtime.sendMessage({
            'foo': 'bar'
        })
    }
})

cs.js:

// Send message to ml.js
chrome.runtime.sendMessage({
    'key': 'value'
})
chrome.runtime.onMessage.addListener(function(message) {
    console.log('CS: Second message received')
})

在Firefox中测试时(通过在大约:debugging加载插件,然后访问Google), cs.js发送了消息,ml.js将消息记录到控制台,但cs.js没有记录消息。

我将感激你的帮助,谢谢!

使用runtime.sendMessage()(消息背景脚本):

runtime.sendMessage() (Chrome/Firefox)方法用于向在后台运行的脚本(后台脚本,弹出脚本等)发送消息。即使当它被用于从后台上下文的脚本发送消息时(例如,在弹出脚本和后台脚本之间进行通信),它也会被当前正在侦听的其他后台上下文脚本接收,而不是发送它的脚本。

引用Google Chrome runtime.sendMessage()文档(强调我的):

如果发送到您的扩展,runtime.onMessage事件将在您的扩展的每一帧中被触发(除了发送方的帧)…

发送消息到你的内容脚本(tabs.sendMessage())

如果你想从你的后台脚本发送消息到你的内容脚本,你应该使用tabs.sendMessage() (Chrome/Firefox)。或者,您可以使用runtimetabs中的connect()方法,然后为您提供端口(Chrome/Firefox)。

引用:

  • 消息传递(Chrome)
  • 与后台脚本通信(Firefox)