我正在尝试构建一个Firefox插件,该插件会根据用户右键点击的内容向FF上下文菜单添加一个反应不同的项目:
一旦用户右键单击一个元素,该插件就会启动一个外部EXE,其参数为一个字符串,其中包含所选文本和链接(链接或链接到图像)。
到目前为止,我设法完成了自己的工作 但是我遇到的问题是现在我有两个独立的工作插件。我不知道如何告诉javascript"如果您检测到选定的文字,请执行此操作","如果您检测到图片或链接,请执行此操作"。我的意思是,我不知道如何把两个片段放在一起!
插件#1:文字选择:
var {Cc,Ci} = require("chrome");
var contextMenu = require('sdk/context-menu');
var selection = require('sdk/selection');
var menuItem = contextMenu.Item({
label: "send selected text to...",
context: contextMenu.SelectionContext(),
contentScript: 'self.on("click", function() {' +
'var text = window.getSelection().toString();' +
'self.postMessage(text);' +
'});',
onMessage: function(args) {
var args = [selection.text];
var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);
file.initWithPath("c:\\cmdline.exe");
var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
process.init(file);
process.run(false, args, args.length);
}
});
插件#2:LINK和IMAGE:
var {Cc,Ci} = require("chrome");
var cm = require("sdk/context-menu");
cm.Item({
label: "send link/image to...",
context: cm.SelectorContext("a[href], img"),
contentScript: 'self.on("click", function (node, data) {' +
' self.postMessage(node.src);' +
'});',
onMessage: function(imgsrc) {
var args = [imgsrc];
var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);
file.initWithPath("c:\\cmdline.exe");
var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
process.init(file);
process.run(false, args, args.length);
}
cmdline.EXE 是一个简单的EXE,可以打开一个提示其commad行参数的MsgBox。
您可能会注意到,上下文菜单标签会根据右键单击的对象而更改。我不知道如何以编程方式进行。
P.S。不知道为什么,但是控制台一直在撤退"第0行:错误:访问属性' toString""的权限被拒绝,但插件仍然有效