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

Kas*_*Lee 3 javascript firefox-addon google-chrome-extension firefox-addon-webextensions

我正在为Chrome和Firefox开发扩展程序,但遇到了问题。

基本上,我正在尝试获取内容脚本来使用侦听消息chrome.runtime.onMessage.addListener(...),但是它似乎不起作用。

我通过从内容脚本发送消息来对其进行了测试。后台脚本(ml.js)的侦听器运行良好,但是内容脚本中的lsitener没收到消息。

您可以在此要点(或下方)中查看代码。

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"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

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'
        })
    }
})
Run Code Online (Sandbox Code Playgroud)

cs.js

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

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

我会感谢您的帮助,谢谢!

Mak*_*yen 5

使用runtime.sendMessage()(消息后台脚本):

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

引用Google Chrome runtime.sendMessage()文档(重点是我的):

如果发送到您的扩展程序,则该runtime.onMessage事件将在您扩展程序的每个帧中触发(发件人的帧除外)...

向您的内容脚本发送消息(tabs.sendMessage()

如果要将消息从后台脚本发送到内容脚本,则应使用tabs.sendMessage()Chrome / Firefox)。或者,你可以使用connect()的方法runtimetabs,然后为你提供一个端口(浏览器 / 火狐)。

参考文献: