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没有记录消息。
我会感谢您的帮助,谢谢!
runtime.sendMessage()(消息到后台脚本):的runtime.sendMessage()(铬 / 火狐)方法被用于将消息发送到被在背景历境正在运行的脚本(脚本背景,弹出脚本等)。即使使用它从后台上下文中的脚本发送消息(例如,在弹出脚本和后台脚本之间进行通信),其他当前正在侦听的后台上下文脚本也会接收到该消息,而不是正在发送的脚本会接收到该消息。它。
引用Google Chrome runtime.sendMessage()文档(重点是我的):
如果发送到您的扩展程序,则该
runtime.onMessage事件将在您扩展程序的每个帧中触发(发件人的帧除外)...
tabs.sendMessage())如果要将消息从后台脚本发送到内容脚本,则应使用tabs.sendMessage()(Chrome / Firefox)。或者,你可以使用connect()的方法runtime和tabs,然后为你提供一个端口(浏览器 / 火狐)。
参考文献:
| 归档时间: |
|
| 查看次数: |
1765 次 |
| 最近记录: |