2011-12-23 68 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); 
    } 
}); 
相關問題