Chrome / Firefox扩展程序 - 内容脚本不监听邮件

时间:2016-10-30 11:49:10

标签: javascript google-chrome-extension firefox-addon firefox-webextensions

我正在开发Chrome和Firefox的扩展程序,我遇到了一个问题。

基本上,我正在尝试使用chrome.runtime.onMessage.addListener(...)来获取内容脚本来收听消息,但它似乎无法正常工作。

我通过从内容脚本发送消息来测试它。后台脚本(ml.js)有一个工作正常的监听器,但内容脚本中的lsitener只是没有收到消息。

您可以在this 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中测试时(通过加载附件:about:debugging然后访问Google),cs.js发送了消息,ml.js将消息记录到控制台,但是{{1}没有记录消息。

我会感谢一些帮助,谢谢!

1 个答案:

答案 0 :(得分:4)

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

runtime.sendMessage()Chrome / Firefox)方法用于将消息发送到在后台上下文中运行的脚本(后台脚本,弹出脚本等)。即使它用于从后台上下文中的脚本发送消息(例如,到communicate between a popup script and a background script),它也会被其他当前正在侦听的后台上下文脚本接收,但不会被发送它的脚本接收。

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

  

如果发送到您的分机,runtime.onMessage活动将在您分机的每一帧中被触发(发件人的框架除外)...

向内容脚本(tabs.sendMessage()

发送消息

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

参考文献: