2011-12-23 60 views
3

我正在尝试使用在线Add-On SDK创建Firefox附加组件。如何使用Firefox附加SDK获取选定的文本?

我开始用简单的东西 - 我想添加一个工具栏按钮,读取当前选定的文本。

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); 
    } 
}); 

我也尝试创建onClick甚至里面的selection对象,具有同样的效果。
我能够使用select事件得到新的选择通知,所以我想我可以使用它(并保持值),但我想知道为什么上面的代码不工作...我在做什么错误?

+0

@Wladimir - 你确定这是SDK?据我所知,SDK是本地安装的。我使用该网站的标题是“附加生成器” ......他们看起来像两个不同的东西在https://addons.mozilla.org/en-US/developers/builder(虽然,API是希望同) – Kobi 2011-12-25 14:39:06

+0

这并不重要 - 构建器只是一个用于“编译”SDK附加组件的网络工具。无论您使用本地SDK安装还是构建器,它都是相同的API。 – 2011-12-25 22:23:02

回答

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! 
    } 
}); 
+0

非常感谢!我将代码添加到答案中,希望你不介意。它很有趣 - 工具栏按钮也从url文本框中读取选择,这有点奇怪。我想我会留在选择赛事中(如我的回答),因为它给我最好的结果,而不考虑焦点。再次感谢! – Kobi 2011-12-24 22:21:50

+0

没问题。我尝试了一下,我的第一个回答是使用选择事件。但后来我发现了焦点问题,这很有趣。 – 2011-12-25 04:57:58

+0

你的在线测试不见了 – rubo77 2014-05-22 11:19:29

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); 
    } 
}); 
相关问题