Javascript Firefox附加sdk:右键单击子菜单上下文以显示面板
我有一个上下文菜单,可以扩展为两个子菜单。我想点击子菜单来显示一个弹出菜单,我将允许用户输入。我已经在网上搜寻了一些帮助,但是没有用。下面是我的main.js的样子Javascript Firefox附加sdk:右键单击子菜单上下文以显示面板,javascript,jquery,firefox-addon-sdk,Javascript,Jquery,Firefox Addon Sdk,我有一个上下文菜单,可以扩展为两个子菜单。我想点击子菜单来显示一个弹出菜单,我将允许用户输入。我已经在网上搜寻了一些帮助,但是没有用。下面是我的main.js的样子 /** * main.js file defining context mmenu using Item and Menu * **/ var cm = require("sdk/context-menu"); var data = require("sdk/self").data; /** * Construct a pane
/**
* main.js file defining context mmenu using Item and Menu
*
**/
var cm = require("sdk/context-menu");
var data = require("sdk/self").data;
/**
* Construct a panel, loading its content from the "text-entry.html"
* file in the "data" directory, and loading the "get-text.js" script
* into it.
**/
var textEntry = require("sdk/panel").Panel({
contentURL: data.url("text-entry.html"),
contentScriptFIle: data.url("get-text.js")
});
var quickInkItem = cm.Item({
label: "Quick Ink",
contentScriptFile: data.url("testscript.js")
});
var inkToBoardItem = cm.Item({
label: "Ink to Board",
onClick: handleClick, //Does not work
contentScriptFile: data.url("testscript.js")
});
var inkLibsMenu = cm.Menu({
label: "inkLibs",
context: cm.SelectorContext("a[href]"),
items: [quickInkItem, inkToBoardItem]
});
//Show panel when user clicks the ink-to-Board submenu
function handleClick(){
textEntry.show();
}
//When the panel is displayed, it generates an event called 'show'
//We will listen to that event and when it happens, send our own "show" event
//to the panel's script, so the script can prepare the panel for display
textEntry.on('show', function(){
textEntry.port.emit("show");
});
//Listen for the messages called "text-entered" coming from the content script
//The message payload is the text the user entered.
textEntry.port.on("text-entered", function(text){
console.log(text);
textEntry.hide();
});
你很接近,但不太接近。当前上下文菜单api没有onClick处理程序,相反,您需要使用内容脚本来手动处理单击并将消息返回到主加载项代码。这不是很好,我们有计划改进它 对于每个上下文菜单项,您需要通过创建onMessage处理程序来侦听消息事件:
var quickInkItem = cm.Item({
label: "Quick Ink",
onMessage: handleClick, // Works!
contentScriptFile: data.url("testscript.js")
});
更重要的是,您需要在“testscript.js”中添加类似以下代码的内容:
self.on("click", function(node) {
console.log(node.href);
self.postMessage(true); // you could send data as well
});
请参阅有关处理单击的文档