我想编写一个 Firefox 扩展,复制到剪贴板并使用选定的文本参数执行外部程序。 我找到了这个链接MDN Using Clipboard用于剪贴板复制,但不起作用。当我尝试使用 cfx run 执行时,我总是收到此错误消息
(c:\Works\Firefox\addon-sdk-1.17) c:\Works\Firefox\ExternalOpener>cfx run
The following lines from file c:\Works\Firefox\ExternalOpener\lib\main.js: 11: const gClipboardHelper = Components.classes["@mozilla.org/widget/clipboard helper;1"].getService(Components.interfaces.nsIClipboardHelper); use 'Components' to access chrome authority. To do so, you need to add a line somewhat like the following:
const {Cc,Ci} = require("chrome");
Then you can use any shortcuts to its properties that you import from the 'chrome' module ('Cc', 'Ci', 'Cm', 'Cr', and 'Cu' for the 'classes', 'interfaces', 'manager', 'results', and 'utils' properties, respectively. And
components
forComponents
object itself).
这是我的 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);
}
});
欢迎提出任何关于剪贴板复制或带参数的外部应用程序执行的想法...
谢谢
最佳答案
该文档属于基于 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 的文档以了解它们和其他属性;)
关于javascript - 在 Firefox 扩展中复制到剪贴板不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27866328/