1

私は Firefox の拡張機能を開発していて、それについて助けが必要です。
私の拡張機能はオーバーレイされ、XBL バインディングを使用して新しい項目をユーザー インターフェイスに追加します。
この拡張機能をブートストラップ タイプに変換することは可能ですか?

検索バーにボタンを追加しようとしています。
XBL を使用して findbar インターフェイスをオーバーライドしました。

ブートストラップから始めるために、style.css に "findbar{ -moz-binding:... }" ルールを含め、このシートを startup() に登録します
(nsIStyleSheetService.loadAndRegisterSheet() を使用)。
この場合、ボタンは再起動せずにバーに追加されます。

しかし、アドオンを無効にするか削除すると、ボタンが消えるようにブラウザを再起動する必要があります。
以下を使用して、bootstrap.js の shutdown() で削除しようとしました。

var fb=window.gFindBar.getElement("findbar-container")  
var but=window.gFindBar.getElement("the-button")  
fb.removeChild(but)  

しかし、これはそれを削除しませんでした。私はコードをデバッグし、すべての要素 (fb、しかし) が見つかって削除されましたが、私が持っていた、または開いたタブの実際の検索バーには触れませんでした。

そこで、XBL を検索バーにバインドするスタイルシートの登録を解除しようとしました。今回は、現在のタブで検索バーが開かなかっただけです。
しかし、新しいタブでは、ボタンなしで開きました(少し良くなりました...)。

また、「this.browser is undefined」という奇妙なエラーのために、開いているタブで検索バーが開かないこともわかりました。
このエラーは、コードが _unpdateCaseSensitivity() を実行しようとしたが、"gFindBar._browser" プロパティを取得できなかった findbar.xml 行 533 を示していました。
おそらく、このプロパティがブラウザの開始時から元の findbar オブジェクトにロードされていなかったことが原因です (オーバーライドされた findbar オブジェクトによって使用されていました)...

これが私がこだわったポイントです...

そして問題は次
のとおりです。再起動せずにボタンを削除して、検索バーが開くようにするにはどうすればよいですか?

4

1 に答える 1

1

Findbar Tweakアドオンからこのメソッドを抽出して、新しいチェックボックスをfindbarに追加しました(そして、必要に応じて変更しました):

var findbar=window.gFindBar
var container = findbar.getElement("findbar-container")
var button = $('<toolbarbutton>')
button.setAttribute('anonid', 'test-find-tabs')
button.setAttribute('label', 'Test')
button.setAttribute('type', 'checkbox')
button.addEventListener('command', test,false)
container.insertBefore(button, findbar.getElement('find-case-sensitive').nextSibling)

しかし、私の最終的な目的のためには、追加の編集が必要です。というわけで、とりあえずこの問題は置いておきます。後で賢明な考えが浮かぶかもしれません。問題から焦点を移し、問題に戻った後に、良いアイデアが頭に浮かぶことがよくあります...

于 2015-01-09T10:49:22.120 に答える