我正在尝试使用在线Add-On SDK创建一个Firefox插件。
我从一些简单的东西开始 - 我想添加一个工具栏按钮,用于读取当前选定的文本。
documentation for the Selection对象使这看起来很简单:
var selection = require("selection");
if (selection.text)
console.log(selection.text);
这对我来说似乎没有用,我只是得到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);
}
});
我也尝试在selection
内创建onClick
对象,效果相同。
我可以使用select
事件来获得有关新选择的通知,所以我想我可以使用它来代替(并保留值),但我想知道为什么上面的代码不起作用...什么是我做错了吗?
答案 0 :(得分:8)
定义的selection
变量只有选中的文本才会有焦点。单击窗口小部件图标会使焦点远离所选文本,因此它不会选择任何文本。
这就是在侦听器函数中使用它时的原因。
为了确认这一点,我尝试在按下工具栏按钮时使用toolbarbutton module)记录其值,并且它可以正常工作。按下工具栏按钮(大概)不会窃取焦点。
以下是代码and you can test it online too:
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!
}
});
答案 1 :(得分:2)
以下是使用select
事件的解决方案:
var selection = require("selection");
var selectedText = '';
function selectionChanged(event){
//todo: check for selection.isContiguous
selectedText = selection.text;
}
selection.on('select', selectionChanged);
require("widget").Widget({
id: "widgetID1",
label: "Test Mozilla Widget",
contentURL: "http://www.mozilla.org/favicon.ico",
onClick: function(event) {
console.log('Selection: ' + selectedText);
}
});