Chrome / Firefox扩展-内容脚本不监听消息
Chrome / Firefox extension - Content script not listening for messages
我正在为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)。或者,您可以使用runtime
和tabs
中的connect()
方法,然后为您提供端口(Chrome/Firefox)。
引用:
- 消息传递(Chrome)
- 与后台脚本通信(Firefox)
- 如何在AngularJS中监听点击事件,而不是触摸事件
- BackboneJS-监听嵌套的模型更改
- 在Firefox restartless插件中,当一个新窗口打开时,我如何运行代码(监听窗口打开)
- 监听touchend有时会触发移动点击事件
- 使用ajax的Django jquery.如何让jquery监听id's生成的表单
- JQuery监听点击并使用点击元素发出警报's href
- jQuery有没有,或者有没有jQuery插件,内置了监听CSS3动画事件的功能(例如animationEnd)
- 如何让Google Maps API v3监听dragend事件并在投递时填充表单字段
- 如何在angular js中监听dom就绪事件
- Phonegap:监听页面并关闭InAppBrowser返回index.html的简单方法
- React鼠标事件在没有监听它们的组件上触发
- 监听发布到网站的广告的新网址
- 我应该使用什么模式在 Node/JavaScript 中制作监听机器人
- 如何在具体化 CSS 中监听<选择>更改事件
- 如何将誓言令牌推送到本地存储或本地会话并监听存储事件?(SoundCloud Php/JS 错误解决方法)
- 在 nsiWindowWatcher 或 nsiWindowMediator 上监听焦点/模糊?对于火狐扩展
- 有没有办法在 asp.net MVC 3 中使用 JavaScript、Jquery 监听事件
- Chrome / Firefox扩展-内容脚本不监听消息
- 在Greasemonkey用户脚本中监听github.com PJAX事件
- 如何监听脚本标签's的onload事件