在Firefox扩展中复制到剪贴板不起作用

时间:2015-01-09 17:52:14

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

我想编写一个Firefox扩展,将副本复制到剪贴板并使用选定的文本参数执行外部程序。 我发现此链接MDN Using Clipboard用于剪贴板复制,但无效。当我尝试使用cfx run执行时总是收到此错误消息

  

(C:\工程\火狐\插件-SDK-1.17)   c:\ Works \ Firefox \ ExternalOpener> cfx run

     

文件中的以下行   c:\ Works \ Firefox \ ExternalOpener \ lib \ main.js:11:const   gClipboardHelper = Components.classes [“@ mozilla.org/widget/clipboard   helper; 1“]。getService(Components.interfaces.nsIClipboardHelper);使用   '组件'访问chrome权限。为此,您需要添加一个   有点像以下几行:

     

const {Cc,Ci} = require(“chrome”);

     

然后,您可以使用从其导入的属性的任何快捷方式   'chrome'模块('Cc','Ci','Cm','Cr'和'Cu'代表   'classes','interfaces','manager','results'和'utils'属性,   分别。 components对象本身Components

这是我的main.js

var contextMenu = require("sdk/context-menu");
 var menuItem = contextMenu.Item({
  label: "Open in External",
  context: contextMenu.SelectionContext(),
  contentScript: 'self.on("click", function () {' +
                 '  var text = window.getSelection().toString();' +
                 '  self.postMessage(text);' +
                 '});',
  onMessage: function (selectionText) {
    console.log(selectionText);
    const gClipboardHelper = Components.classes["@mozilla.org/widget/clipboardhelper;1"].getService(Components.interfaces.nsIClipboardHelper);
gClipboardHelper.copyString(selectionText);

  }
});

欢迎使用参数...

进行剪贴板复制或外部应用程序执行

由于

2 个答案:

答案 0 :(得分:2)

该文档属于基于XUL的插件,而您正在编写的插件基于Addon-SDK

要在基于sdk的插件中使用Component.classesComponent.interfaces,您需要Chrome Authority

该错误告诉您的是没有定义Components.classes和Components.interfaces。为了使用你必须首先要求它们:

const {Cc, Ci} = require("chrome");

然后以这种方式使用它们:

const gClipboardHelper =Cc["@mozilla.org/widget/clipboardhelper;1"].getService(Ci.nsIClipboardHelper);
gClipboardHelper.copyString(selectionText);

Cc 代表Component.classes Ci 代表Components.interfaces。请阅读有关Chrome Authority的文档以了解它们和其他属性;)

答案 1 :(得分:0)

我认为这正是您所寻找的:https://developer.mozilla.org/en-US/Add-ons/SDK/High-Level_APIs/clipboard

你可以像这样使用它:

var clipboard = require("sdk/clipboard");
clipboard.set("Lorem ipsum dolor sit amet");
var contents = clipboard.get();