如何将消息从面板发送到页面mod'的内容脚本
How to send message from panel to page-mod's content script directly?
如果Firefox插件中有如下代码片段:
var pagemod = PageMod({
include: ['*'],
contentScriptFile: [data.url('content.js')]
});
panel = require("sdk/panel").Panel({
width: 322,
height: 427,
contentURL: data.url("main.html"),
include:["http://*/*","https://*/*"],
contentScriptFile: [data.url('panel.js')]
});
我在Chrome扩展中找到了一些示例代码。它们使用window.parent.postMessage(message, "*")
发送消息,使用window.addEventListener("message",function (e) {//do something}
接收消息。如何在Firefox插件中直接将消息从"panel.js
"发送到"content.js
"?
解决方案的概念与以下答案非常相似:
- 维护每个选项卡的消息端口列表
- 如果要发送消息,请向所有列出的端口发送消息
以下代码用于维护端口列表:
var ports = [];
var pagemod = PageMod({
include: ['*'],
contentScriptFile: [data.url('content.js')],
onAttach: function(worker) {
ports.push(worker.port);
worker.on('detach', function() {
var index = ports.indexOf(worker.port);
if (index !== -1) ports.splice(index, 1);
});
}
});
现在,每当您想从panel.js
发送消息时,只需使用:
// panel.js
self.port.emit('message-to-tabs', 'example of message');
在创建面板后,必须在主脚本中处理消息:
panel = require('sdk/panel').Panel({
width: 322,
height: 427,
contentURL: data.url('main.html'),
include: ['http://*/*', 'https://*/*'],
contentScriptFile: [data.url('panel.js')]
});
panel.port.on('message-to-tabs', function(message) {
for (var i=0; i<ports.length; i++) {
ports[i].emit('message-to-tab', message);
}
});
在选项卡的内容脚本(content.js)中,您可以监听此事件并按如下方式处理:
self.port.on('message-to-tab', function(message) {
// Do something with message
});
相关文章:
- 当包含另一个asp文件时,是否也包含所有引用的样式和脚本页面
- 借助asp.net验证或java脚本对多个文本进行验证
- chrome扩展:尽管运行了at:documentidle,js脚本还是过早启动
- Java脚本时间添加
- 不显示带有本地json文件数据的谷歌地图脚本
- JQuery添加元素需要在我的js之前再次添加JQuery脚本
- 从远程脚本获取用户IP
- 如何根据时间运行不同的脚本
- 如何将字符串值从php页面发送到java脚本页面
- 使用谷歌应用程序脚本将服务器端数据表返回到客户端
- 可以设置“;文件名"发生错误时显示的内联脚本标记的
- 当脚本由system.js加载时,如何要求('electron')
- HTML标记在脚本标记中工作
- 是否可以控制获取哪些Google地图脚本(JavaScript API)
- 使用谷歌应用程序脚本从工作表中获取值并将其显示在文本框中
- 显示时间的脚本
- 如何将消息从面板发送到页面mod'的内容脚本
- 内容脚本(页面mod)和弹出(面板)之间的通信
- 使用Mod操作符.我编写了一个脚本来读取一个整数并显示它是奇数还是偶数
- Mod重写和java脚本弹出窗口