keyconfigは拡張開発にも使える
(keyconfigについては11/6の日記も参照のこと)
Search Buttonという拡張がある。自分はこの拡張の持つAuto-clear Search Barという機能が気に入ってたんだけど、残念ながらこの拡張はFirefox 2.0に対応していない。そこでAuto-clear Search Bar機能のみを持った拡張を作ろうとして、手始めにkeyconfigで同様の機能を実装してみた。
以下のスクリプトをkeyconfigで適当なキー(例えばCtrl+Q)に割り当てて、新しいウィンドウを開き、割り当てたキーを押す。するとそれ以降、検索バーの検索ボタンクリックまたはエンターキー押下で、検索バーに表示されている検索ワードが自動的に消去されるようになる(Firefox 2.0専用)。
SearchbarAutoClear = { invokeLater: function(func) { /* alert("invokeLater: " + func); */ setTimeout(func, 0); }, getSearchbar: function() { return document.getElementById("searchbar"); }, clearSearchbarTextBox: function() { /* alert("clear!"); */ var searchbar = this.getSearchbar(); if (searchbar) { var searchbox = searchbar._textbox searchbox.textValue = ''; searchbox.focus(); } }, searchBarClicked: function(event) { var target = event.originalTarget; var anonid = target.getAttribute("anonid"); if ((anonid == "search-go-button") && (event.button == 0)) { SearchbarAutoClear.invokeLater(function() { SearchbarAutoClear.clearSearchbarTextBox(); content.focus(); }); } }, installAdvicedOnTextEntered: function() { var searchbar = this.getSearchbar(); if (searchbar) { var target = searchbar._textbox; var method = 'onTextEntered'; var originalOnTextEntered = target[method]; target[method] = function(aEvent) { originalOnTextEntered.apply(this, aEvent); SearchbarAutoClear.clearSearchbarTextBox(); }; } }, init: function() { var searchbar = this.getSearchbar(); if (searchbar) { searchbar.addEventListener("click", this.searchBarClicked, true); this.installAdvicedOnTextEntered(); } }, }; try { SearchbarAutoClear.init(); alert("searchbar hack installed"); } catch (e) { alert("searchbar hack failed: " + e.description + " at " + e.number); }