Почему оверлей xul создает 2 идентификатора вместо объединения?

Я вижу это в панели инструментов браузера:набор инструментов браузера

Я бы подумал, что он объединит мой оверлей с одним и тем же идентификатором - почему он создает два с одинаковым идентификатором?

<?xml version="1.0" encoding="utf-8"?>
<overlay id="dtInspectorOverlay" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<popupset id="inspectorPopupSet">
    <menupopup id="inspector-node-popup">
    <!--    <menuitem id="node-menu-edititem"
            label="Edit HTML"
            accesskey="E"
            oncommand="dt.editHtml()"
            position="1"/>-->
        <menuseparator position="2"/>
        <menuitem id="node-menu-setA"
            label="Set Node A"
            accesskey="A"
            oncommand="dt.setA()"
            position="3"/>
        <menuitem id="node-menu-setB"
            label="Set Node B and Compare"
            accesskey="B"
            oncommand="dt.setB()"
            position="4"/>
        <menuseparator position="5"/>

    </menupopup>
    <menupopup id="rule-view-context-menu">
      <!--<menuitem label="Copy Selection" accesskey="C" oncommand="dt.copySelection()"/>-->
      <menuitem position="4" id="dtCSSCOPYURL" label="Copy URL" accesskey="U" oncommand="dt.urlCopy()" />
      <menuitem position="5" id="dtCSSOPENURL" label="Open URL in New Tab" accesskey="O" oncommand="dt.urlOpen()"/>
      <!--<menuitem label="New Rule..." accesskey="N" oncommand="dt.newRule()"/>-->
    </menupopup>
</popupset>

<script src="chrome://devtooltweaks/content/lib/FlexiColorPicker.js"></script>
<script src="chrome://devtooltweaks/content/inspectorTweaks.js"></script>
</overlay>

Исходный код здесь.


person NoBugs    schedule 09.10.2014    source источник
comment
Вы накладываете chrome://browser/content/devtools/inspector/inspector.xul?   -  person paa    schedule 09.10.2014
comment
да. исходный код здесь   -  person NoBugs    schedule 10.10.2014


Ответы (1)


Я полагаю, что вы справились с этим, но spector.xul генерируется динамически. Это означает, что после применения вашего оверлея код devtools добавляет новое всплывающее меню (второе, которое вы видите).

Вместо этого вам нужно сделать что-то вроде этого:

cssInspectorOverlay.xul

<?xml version="1.0" encoding="utf-8"?>
<overlay id="cssInspectorOverlay" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<script type="text/javascript" src="chrome://devtooltweaks/content/cssInspectorOverlay.js"></script>
</overlay>

cssInspectorOverlay.js

window.addEventListener('load',function(evt) {
  const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";

  function createMenuItem(aMenu, aAttributes) {
    let item = aMenu.ownerDocument.createElementNS(XUL_NS, "menuitem");

    item.setAttribute("label", aAttributes.label);
    item.setAttribute("accesskey", aAttributes.accesskey);
    item.addEventListener("command", aAttributes.command);
    aMenu.appendChild(item);

    return item;
  }

  ...

  // Add menu items and custom using JavaScript here.
}
person Mike Ratcliffe    schedule 27.10.2014
comment
Спасибо! Значит, xul, который мы всегда используем для расширения кода, не работает с добавленными элементами, как это делает CSS? Это интересно, я надеюсь, что в devtools есть какая-то документация по этому вопросу о том, как их расширить :) - person NoBugs; 28.10.2014