BookSearcherの改良
右クリックした時に、選択中の文字列を表示させるようにしたい。(googleのやつみたいに)
ついでに、未選択の場合は、リンクを非表示にしたい。
右クリックイベントをフックさせようか(フックの使い方あってる?)と思ったけど、FireFoxにはコンテキストメニュー表示時用のイベントが用意されているみたいなので、今回はそれを使う。
変更箇所
今回の改良での変更は2つ・content/booksearcher.xul
・content/booksearcher.js
content/booksearcher.xulに関しては、表示するメッセージを少し変更しただけ。
booksearcher.jsの変更点
booksearcher.jsは、BookSearcherにcheckSelection関数とinit関数、JS読み込み時の初期化処理を追加した。var BookSearcher = { search: function() { 〜省略〜 }, checkSelection: function() { var separator = document.getElementById( "booksearcher-separator" ); var link = document.getElementById( "booksearcher-link" ); // 文字列を選択していた場合、表示。選択していない場合、非表示。 separator.hidden = !gContextMenu.isTextSelected; link.hidden = !gContextMenu.isTextSelected; if( gContextMenu.isTextSelected ){ var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"] .getService( Components.interfaces.nsIWindowMediator ); // 最近操作したウインドウを取得 var mainWinodw = wm.getMostRecentWindow( "navigator:browser" ); // 選択中の文字列を取得 var selectString = mainWinodw.content.document.getSelection(); // コンテキストメニュー表示メッセージの設定 link.label = 'Search Book for "' + selectString + '"'; } }, init: function() { var contextMenu = document.getElementById( "contentAreaContextMenu" ); if( contextMenu ) { // コンテキストメニュー表示時に、文字列選択状態を確認 contextMenu.addEventListener( "popupshowing", BookSearcher.checkSelection, false ); } } }; window.addEventListener( "load", BookSearcher.init, false );
・initの処理
コンテキストメニュー表示時に、文字列の選択状態を確認する。
・checkSelectionの処理
文字列未選択の場合、書籍検索用リンクを非表示。また、選択していた場合は、書籍検索用リンクを表示して、リンクのラベルに選択中の文字列を追加する。
コードはココ