Javascript 如何在firefox插件中从main.js调用内容脚本函数
我是Firefox插件开发新手 我需要一种从firefox插件中的main.js调用contentscript函数的方法 我在每个打开的网页上都注入了contentscript xyz.js 单击导航工具栏中的按钮,我想从my main.js调用contentscript xyz.js中的函数abc() 下面是我的代码 Main.jsJavascript 如何在firefox插件中从main.js调用内容脚本函数,javascript,firefox-addon,firefox-addon-sdk,Javascript,Firefox Addon,Firefox Addon Sdk,我是Firefox插件开发新手 我需要一种从firefox插件中的main.js调用contentscript函数的方法 我在每个打开的网页上都注入了contentscript xyz.js 单击导航工具栏中的按钮,我想从my main.js调用contentscript xyz.js中的函数abc() 下面是我的代码 Main.js .. function addToolbarButton() { var document = mediator.getMostRecentWindow(
..
function addToolbarButton() {
var document = mediator.getMostRecentWindow('navigator:browser').document;
var navBar = document.getElementById('nav-bar');
if (!navBar) {
return;
}
var btn = document.createElement('toolbarbutton');
btn.setAttribute('id', 'mybutton-id');
btn.setAttribute('type', 'button');
btn.setAttribute('class', 'toolbarbutton-1');
btn.setAttribute('image', data.url('icon_16.png'));
btn.setAttribute('orient', 'vertical');
btn.setAttribute('label', 'Test');
btn.addEventListener('click', function() {
tabs.activeTab.attach({
//
abc() //here i want to call the function present in my contentscript
//
});
}, false)
navBar.appendChild(btn);
}
..
xyz.js
..
function abc(){
//here is my code logic
}
..
我开始知道消息传递是一种方法,但无法在firefox中实现
请帮助我,我遇到了问题。您不能直接调用函数,您需要向内容脚本发送消息。意思是这样的:
var worker = tabs.activeTab.attach({
...
});
// Some time later
worker.postMessage("doABC");
在内容脚本中:
self.on("message", function(message) {
if (message == "doABC")
abc();
});
有关与内容脚本通信的更多信息,请参阅。根据文档,它应该以这种方式工作 然而,我有一个类似的问题尚未解决
// main.js
function handleClick(state) {
var myWorker = tabs.activeTab.attach({
});
myWorker.port.emit("initialize", "Message from the add-on");
}
// content.js
/*BEGIN Listen events coming from Add-on script*/
self.port.on("initialize", function () {
alert('self.port.on("initialize")');
return;
});
这是一个非常常见的问题——我们应该开始链接到一个规范答案而不是重新回答吗?@canuckistani:有一个规范答案吗?我的答案是一个扩展的RTFM。然而,在大多数情况下,人们无法完全理解SDK的消息传递方法。我完全支持将这些问题作为重复问题来结束,但从来没有一个问题足够相似(实际上可能是“太本地化”的迹象)。我回顾了这些问题的最新历史,并同意——所有问题都已经足够不同了。感谢你有耐心为他们指出正确的方向。