2011-12-23 5 views
3

私はFirefoxのアドオンをオンラインAdd-On SDKで作成しようとしています。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); 
    } 
}); 

私も同じ効果で、でもonClickselectionオブジェクトを作成しようとしました。
私はselectイベントを使用して新しい選択について通知を受けることができるので、代わりにその値を使用することができますが、上記のコードが機能していないのは不思議です...私は何をしていますか?違う?ここで

+0

@Wladimir - あなたはそれがSDKでしたか?私が知る限り、SDKはローカルにインストールされています。私が使ったサイトは「アドオンビルダー」と呼ばれています... https://addons.mozilla.org/en-US/developers/builderでは2つの異なるものに見えます(しかしAPIはうまくいけば同じです) – Kobi

+0

これは問題ではありません。ビルダーは、SDKでアドオンを「コンパイル」するための単なるWebツールです。ローカルSDKインストールを使用する場合でもビルダーを使用する場合も、同じAPIです。 –

答えて

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

+0

問題ありません。私は少しこれを試して、私の最初の答えは、選択イベントを使用するつもりでした。しかし、私は焦点の問題を発見しました。これは面白かったです。 –

+0

オンラインテストが終了しました – rubo77

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); 
    } 
}); 
関連する問題