我想编写一个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);
}
});
欢迎使用参数...
进行剪贴板复制或外部应用程序执行由于
答案 0 :(得分:2)
该文档属于基于XUL的插件,而您正在编写的插件基于Addon-SDK。
要在基于sdk的插件中使用Component.classes
和Component.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();