如何使用Firefox Add-On SDK获取所选文本?

Kob*_*obi 3 firefox firefox-addon firefox-addon-sdk

我正在尝试使用在线Add-On SDK创建一个Firefox附加组件.

我从一些简单的东西开始 - 我想添加一个工具栏按钮来读取当前选定的文本.

Selection对象的文档使这看起来很简单:

var selection = require("selection");
if (selection.text)
  console.log(selection.text);
Run Code Online (Sandbox Code Playgroud)

这似乎对我不起作用,我得到了null.

这是我的完整代码:

var selection = require("selection");

require("widget").Widget({
    id: "widgetID1",
    label: "Test Mozilla Widget",
    contentURL: "http://www.mozilla.org/favicon.ico",
    onClick: function(event) {
        console.log('selection.text = ' + selection.text);
    }
});
Run Code Online (Sandbox Code Playgroud)

我也尝试selectiononClickeven中创建对象,效果相同.
我能够使用该select事件获得有关新选择的通知,所以我想我可以使用它而不是(并保留值),但我想知道为什么上面的代码不起作用...我做错了什么?

Sri*_*ary 8

selection定义的变量只有选中的文本才会有焦点.单击窗口小部件图标会使焦点远离所选文本,因此它不会选择任何文本.

这就是为什么它在侦听器函数中使用时有效.

为了确认这一点,我尝试在按下工具栏按钮(使用toolbarbutton模块)时记录其值,并且它可以正常工作.按下工具栏按钮(大概)不会窃取焦点.

这是代码,您也可以在线测试:

var selection = require("selection");

var tbb = require("toolbarbutton").ToolbarButton({
    id: "test",
    label: "test",
    image: "http://www.mozilla.org/favicon.ico",
    onCommand: function(event) {
      console.log('selection = ' + JSON.stringify(selection)); // works!
    }
});
Run Code Online (Sandbox Code Playgroud)