Динамический способ отсоединения динамически связанного XBL
Я применяю связывание, как это в перезапускаемом дополнении:
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
с пометкой "только целое слово". Но теперь, чтобы удалить его, я просто отменяю регистрацию таблицы стилейmyServices.sss.unregisterSheet(cssUri, myServices.sss.USER_SHEET);
Однако это не освобождает от обязательств.
ответ на ask.mozilla.org сказал мне, что это ожидаемое поведение, но не предложил никакого решения.
Я подумал, может, мне стоит динамически добавить привязку, а не через CSS, я не проверял это, но это не соответствует трем причинам для обновлений XBL:
Связанный элемент соответствует правилу стиля, которое определяет другую привязкуЭлемент удален из связанного документаЭлемент уничтожен (например, при закрытии документа)Ответ сказал мне, что это ожидаемое поведение.