firefox 插件与 dev/panel 之间的通信
Communication between firefox addon and dev/panel
我需要在 dev/panel 界面中单击按钮时调用高级 API 函数。我是这样实现的。
当addon处于onReady状态时,addon发送postMessage到panelSide。
// index.js
onReady: function() {
// in this function you can communicate
// with the panel document
this.postMessage("add-on-ready", [panelSide]);
//this.postMessage("add-on-ready2", [panelSide]); // This message may be received in logic-panel.js
}
面板会将收到的消息添加到文本区域中,只需按某个按钮即可回复插件:
//logic-panel.js
window.addEventListener("message", function(event) {
var toAddon = event.ports[0];
toAddon.start();
$(document).ready(function(){
$('#log').append(event.data + '\n');
});
switch(event.data){
case "add-on-ready":
$(document).ready(function(){
$("#inspect").click(function(){
toAddon.postMessage("inspect");
});
$("#exit").click(function(){
toAddon.postMessage("exit");
});
});
break;
default:
toAddon.postMessage("event.data = " + event.data);
alert("event.data = " + event.data);
}
});
插件处理响应。如果按钮"inspect"被按下,那么会涉及高层API(即handleClick函数中的PageMod):
//index.js
addonSide.onmessage = function(event) {
console.log(event.data);
switch(event.data){
case "inspect":
console.log("run inspect");
handleClick();
console.log("run inspect end");
break;
case "exit":
console.log("push exit =(");
break;
default:
MyPanel.postMessage("add-on-ready", [panelSide]); //not work
}
}
function handleClick() {
console.log("xpath");
var data = require("sdk/self").data;
var pageMod = require('sdk/page-mod').PageMod({
include: ['*'],
contentScriptFile: data.url("./addonside/xpath.js"),
onAttach: function(worker) {
worker.on('message', function(message) {
console.log('mouseclick: ' + message);
////////////////////////////////
// this.postMessage('mouseclick: ' + message, [panelSide]); // This message not may be received in logic-panel.js
////////////////////////////////
});
}
});
}
Q:如何在handleClick()函数中发送postMessage到面板?也许有更合适的方法来调用高级 APIs 使用 dev/panel?
在index.js声明var _MyPanel;
在onReady
中:
onReady: function() {
_MyPanel = this;
_MyPanel.postMessage("add-on-ready", [panelSide]);
}
和handleClick()
:
function handleClick() {
console.log("xpath");
var data = require("sdk/self").data;
var pageMod = require('sdk/page-mod').PageMod({
include: ['*'],
contentScriptFile: data.url("./addonside/xpath.js"),
onAttach: function(worker) {
worker.on('message', function(message) {
console.log('mouseclick: ' + message);
_MyPanel.postMessage("mouseclick: " + message, [panelSide]);
});
}
});
}
我需要在 dev/panel 界面中单击按钮时调用高级 API 函数。我是这样实现的。 当addon处于onReady状态时,addon发送postMessage到panelSide。
// index.js
onReady: function() {
// in this function you can communicate
// with the panel document
this.postMessage("add-on-ready", [panelSide]);
//this.postMessage("add-on-ready2", [panelSide]); // This message may be received in logic-panel.js
}
面板会将收到的消息添加到文本区域中,只需按某个按钮即可回复插件:
//logic-panel.js
window.addEventListener("message", function(event) {
var toAddon = event.ports[0];
toAddon.start();
$(document).ready(function(){
$('#log').append(event.data + '\n');
});
switch(event.data){
case "add-on-ready":
$(document).ready(function(){
$("#inspect").click(function(){
toAddon.postMessage("inspect");
});
$("#exit").click(function(){
toAddon.postMessage("exit");
});
});
break;
default:
toAddon.postMessage("event.data = " + event.data);
alert("event.data = " + event.data);
}
});
插件处理响应。如果按钮"inspect"被按下,那么会涉及高层API(即handleClick函数中的PageMod):
//index.js
addonSide.onmessage = function(event) {
console.log(event.data);
switch(event.data){
case "inspect":
console.log("run inspect");
handleClick();
console.log("run inspect end");
break;
case "exit":
console.log("push exit =(");
break;
default:
MyPanel.postMessage("add-on-ready", [panelSide]); //not work
}
}
function handleClick() {
console.log("xpath");
var data = require("sdk/self").data;
var pageMod = require('sdk/page-mod').PageMod({
include: ['*'],
contentScriptFile: data.url("./addonside/xpath.js"),
onAttach: function(worker) {
worker.on('message', function(message) {
console.log('mouseclick: ' + message);
////////////////////////////////
// this.postMessage('mouseclick: ' + message, [panelSide]); // This message not may be received in logic-panel.js
////////////////////////////////
});
}
});
}
Q:如何在handleClick()函数中发送postMessage到面板?也许有更合适的方法来调用高级 APIs 使用 dev/panel?
在index.js声明var _MyPanel;
在onReady
中:
onReady: function() {
_MyPanel = this;
_MyPanel.postMessage("add-on-ready", [panelSide]);
}
和handleClick()
:
function handleClick() {
console.log("xpath");
var data = require("sdk/self").data;
var pageMod = require('sdk/page-mod').PageMod({
include: ['*'],
contentScriptFile: data.url("./addonside/xpath.js"),
onAttach: function(worker) {
worker.on('message', function(message) {
console.log('mouseclick: ' + message);
_MyPanel.postMessage("mouseclick: " + message, [panelSide]);
});
}
});
}