再起動のないアドオンで次のようなバインディングを適用しています:
var css = '.findbar-container { -moz-binding:url("' + self.path.chrome + 'findbar.xml#matchword") }';
var cssEnc = encodeURIComponent(css);
var newURIParam = {
aURL: 'data:text/css,' + cssEnc,
aOriginCharset: null,
aBaseURI: null
}
cssUri = Services.io.newURI(newURIParam.aURL, newURIParam.aOriginCharset, newURIParam.aBaseURI);
myServices.sss.loadAndRegisterSheet(cssUri, myServices.sss.USER_SHEET);
findbar.xml
内容は次のとおりです。
<?xml version="1.0"?>
<bindings xmlns="http://www.mozilla.org/xbl" xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<binding id="matchword">
<content>
<children/>
<xul:toolbarbutton anonid="matchwordbtn" accesskey="w" class="tabbable" label="Whole Word Only" tooltiptext="Match only whole words" oncommand="console.log('hi')" type="checkbox"/>
</content>
</binding>
</bindings>
FindBar
これは、 「Whole Word Only」というラベルの付いたボタンを追加するだけです。しかし、今はそれを削除するために、スタイルシートの登録を解除していますがmyServices.sss.unregisterSheet(cssUri, myServices.sss.USER_SHEET);
、これはバインドを解除していません。
ask.mozilla.org での回答によると、これは予想される動作であるとのことでしたが、解決策はありませんでした。
CSS 経由ではなくバインディングを動的に追加する必要があるのではないかと考えていました。これはテストしていませんが、XBL 更新の 3 つの理由に適合しません。
- バインドされた要素が、別のバインディングを指定するスタイル ルールに一致する
- バインドされたドキュメントから要素が削除されます
- 要素が破棄された (たとえば、ドキュメントを閉じることによって)
答えは、それが予想されるがファンキーな動作であると私に言いました。