0

Firefox Bootstrapped Addons では、コンテキスト メニュー項目を手動で挿入/削除、有効/無効、非表示/非表示にする必要があります。

それらを 1 つの要素 (その要素の子として) にグループ化して、グループを 1 つとして処理できるかどうか、つまり、親ノードを削除してすべての子を削除できるかどうか疑問に思っていました。

例えば:

<some parent element for grouping>
    <menuseparator/>
    <menuitem .... />
    <menuitem .... />
    <menuseparator/>
    <menuitem .... />
    <menuseparator/>
</some parent element for grouping>

中に入れてみまし<menu> ... </menu>たが、へこんでしまいましたmenuitem

更新:
Flashgot オーバーレイには、混合されたグループ化があることに気付きましたmenuitemmenupopup ここに画像の説明を入力

<popup id="contentAreaContextMenu">  
  <menu id="flashgot-submenu" hidden="true" persist="hidden" label="FlashGot" class="menu-iconic flashgot-icon-lnk" accesskey="&flashgotLink.accesskey;" insertbefore="context-sep-selectall,context-sep-stop,context-sep-copylink" >
      <menupopup>
          <menuseparator id="flashgot-submenu-anchor" hidden="true" />
          <menuitem id="flashgot-menuitem-it" label="&flashgotLink;" accesskey="&flashgotLink.accesskey;" oncommand="gFlashGot.downloadPopupLink()" key="flashgot-link-key" class="menuitem-iconic flashgot-icon-lnk" />
          <menuitem id="flashgot-menuitem-sel" label="&flashgotSel;" accesskey="&flashgotSel.accesskey;" oncommand="gFlashGot.delayCmd('Sel')" key="flashgot-sel-key" class="menuitem-iconic flashgot-icon-sel" />
          <menuitem id="flashgot-menuitem-all" label="&flashgotAll;" accesskey="&flashgotAll.accesskey;" oncommand="gFlashGot.delayCmd('All')" key="flashgot-all-key" class="menuitem-iconic flashgot-icon-all" />
          <menuitem id="flashgot-menuitem-tabs" label="&flashgotTabs;" accesskey="&flashgotTabs.accesskey;" oncommand="gFlashGot.delayCmd('Tabs')" key="flashgot-tabs-key" class="menuitem-iconic flashgot-icon-tabs" />
          <menuitem id="flashgot-menuitem-media" label="&flashgotMedia;" oncommand="gFlashGot.downloadMedia()" key="flashgot-media-key" class="menuitem-iconic flashgot-icon-media" />

          <menuitem id="flashgot-menuitem-buildGallery" label="&flashgotBuildGallery;" class="menuitem-iconic flashgot-icon-buildGallery" oncommand="gFlashGot.buildGallery()" />
              <menu id="flashgot-menu-options" class="menu-iconic flashgot-icon-opts" label="&flashgotOptions;" >
                  <menupopup id="flashgot-menupopup-options" onpopupshowing="gFlashGot.prepareOptsMenu(event.target)">
                  <menuitem id="flashgot-ctx-menuitem-nodms" hidden="true" label="&flashgotNoDMS;" oncommand="gFlashGotService.showDMSReference()" />
                  <menuseparator id="flashgot-ctx-sep-nodms" />
                  <menuitem id="flashgot-ctx-menuitem-opt-autoStart" label="&flashgotAutostart;" type="checkbox" oncommand="gFlashGot.switchOption('autoStart')" />
                  <menuitem id="flashgot-ctx-menuitem-opt-includeImages" label="&includeImages.label;" type="checkbox" oncommand="gFlashGot.switchOption('includeImages')" />
                  <menuitem id="flashgot-ctx-menuitem-opts" label="&flashgotMoreOpts;" oncommand="gFlashGot.openOptionsDialog()" />
                  <menuseparator id="flashgot-ctx-sep-about" />
                  <menuitem id="flashgot-ctx-menuitem-about" label="&flashgotAbout;" oncommand="gFlashGot.openAboutDialog()" />
                  <menuitem id="flashgot-ctx-homepage" label="&flashgotVisitHomepage;" oncommand="gFlashGot.browseHomePage()" />
                  </menupopup>
              </menu>
      </menupopup>
  </menu>  

  <menuseparator id="flashgot-context-separator" hidden="true" insertbefore="context-sep-selectall,context-sep-stop,context-sep-copylink" /> 
  <menuseparator id="flashgot-context-separator2" hidden="true" insertbefore="context-sep-selectall,context-sep-stop,context-sep-copylink" />   
</popup> 

一枚目は普通。2つ目は、を挿入した後menuitemです<menu class="menu-iconic>

普通 <code><menu class= に挿入した後

4

2 に答える 2

1

見つけた。のタグで囲んで<menu><menupopup>ください。

メニューを 1 つの項目として作成するこの Gist を参照してください: Noitidart / _ff-addon-snippet-CreateMenuWithSubmenuAndAttachToWidget.js

  • この例にはサブメニューがあります
  • この例は、DOM の構築と HTML の挿入に関して AMO が推奨する方法にも従っています。MDN :: DOM の構築と HTML の挿入
    • 以前、この方法に従わなかったためにアドオンが拒否されました。拒否されたときに彼らが私に言ったことは次のとおりです。

      アドオンは、innerHTML に代入するか、同様の方法で、サニタイズされていない可能性のあるデータを含む HTML 文字列から DOM ノードを作成します。非効率であるだけでなく、これは重大なセキュリティ リスクです。詳細については、次を参照してください。https://developer.mozilla.org/en/XUL_School/DOM_Building_and_HTML_Insertion .

したがって、上記の XUL は次のようになります。

<menu>
    <menupopup>
        <menuseparator/>
        <menuitem .... />
        <menuitem .... />
        <menuseparator/>
        <menuitem .... />
        <menuseparator/>
        <keyset>
            <key id="sample-key1" .... />
            <key id="sample-key2" .... />
            <key id="sample-key3" .... />
        </keyset>
    </menupopup>
</menu>
于 2014-07-03T04:47:15.243 に答える
1

<menupopup>likeは個別のcontentAreaContextMenuアイテム (要素) を含むことを想定しているため、プラットフォーム間で確実に機能するハックがあったとしても、それは単なるハックであり、いつでも壊れる可能性があります。いいえ、UI に個別の項目として表示されるメニュー項目を確実に論理的にグループ化することはできません。

また、 のような他の無関係なものを追加しないで<keyset>ください<menupopup>。同じ理由: いつでも壊れる可能性があります。(<keyset>少なくとも<key>要素を論理的にグループ化する方法です...)

于 2014-07-03T08:36:29.223 に答える