Проблема в том, что вы видите комбинацию нескольких привязок XBL, что означает, что все усложняется.Сначала chrome://browser/content/search/search.xml#searchbar
применяется к фактическому тегу <searchbar>
:
<xul:stringbundle/>
<xul:textbox class="searchbar-textbox" anonid="searchbar-textbox">
<xul:box>
<xul:button>
...
</xul:button>
</xul:box>
<xul:hbox class="search-go-container">
<xul:image class="search-go-button" anonid="search-go-button" />
</xul:hbox>
</xul:textbox>
Здесь вы можете видеть, что «search-go-container» является дочерним элементом элемента textbox (не стесняйтесь проверять его parentNode
свойство в DOM Inspector, чтобы проверить это).Но эта структура перекрывается с помощью chrome://global/content/bindings/autocomplete.xml#autocomplete
, применяемого к тегу <textbox>
:
<xul:hbox class="autocomplete-textbox-container">
<children includes="image|deck|stack|box">
<xul:image class="autocomplete-icon"/>
</children>
<xul:hbox anonid="textbox-input-box" class="textbox-input-box">
<children/>
<html:input anonid="input"/>
</xul:hbox>
<children includes="hbox"/>
</xul:hbox>
<xul:dropmarker anonid="historydropmarker" class="autocomplete-history-dropmarker"/>
<xul:popupset anonid="popupset" class="autocomplete-result-popupset"/>
<children includes="toolbarbutton"/>
Обратите внимание на множественные теги <children>
, отмечающие точки вставки для дочерних узлов этого текстового поля.Похоже, что ваш элемент был вставлен в точку вставки <children includes="image|deck|stack|box">
, а не <children includes="hbox">
- кажется, что Gecko не может корректно обрабатывать все различные точки вставки динамически.
Вы можете просто добавить свой блок кОднако элемент "autocomplete-textbox-container":
hbox.appendChild(dropmarker_hbox);
Это кажется нелогичным, но фактически добавит ваш элемент перед "search-go-container" - потому что "search-go-container" нене фактический дочерний элемент, а скорее добавленный в конце реальных дочерних узлов XBL.