Firefox SDK上下文菜单。根据选择的类型或单击的节点添加响应的项目

时间:2015-03-11 11:34:15

标签: javascript firefox-addon firefox-addon-sdk

我正在尝试构建一个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""的权限被拒绝,但插件仍然有效

0 个答案:

没有答案