0

メニューリストのMDNからの例を、Firefox 拡張機能のパネル内の iframe に追加しました。

<menulist>
  <menupopup>
    <menuitem label="option 1" value="1"/>
    <menuitem label="option 2" value="2"/>
    <menuitem label="option 3" value="3"/>
    <menuitem label="option 4" value="4"/>
  </menupopup>
</menulist>

しかし、クリックするとiframeがリロードされます。リロードを停止させるために何かしなければならないことはありますか?

- 編集:

単純な xul ファイルを作成して上記のコードを配置すると、期待どおりに動作するため、問題は周囲のコードにあります。

これは、ボタンをクリックすると開く iframe を持つパネルです。

<button id="bannerLeftOffers"
        class="leftIconsImage"
        type="panel">
    <panel id="offers-panel"
           type="arrow"
           noautofocus="true"
           consumeoutsideclicks="false"
           noautohide="true"
           onpopupshowing="offer.start();">
        <hbox id="offers-panel-container" align="top">
            <iframe id="offers-iframe" flex="1"/>
        </hbox>
    </panel>
</button>

メニューリストをクリックするたびに、関数「offer.start();」が呼び出されますが、その関数の他の呼び出しはありません。パネル onpopupshowing だけなので、メニューリストのイベントがリロードをトリガーしている可能性がありますが、それが何であるかはわかりません。

4

1 に答える 1

0

この問題を次のように修正しました。

追加

offer.open = false

次に、onpopupshowing 関数「start」に次のように追加しました。

if (offer.open == false) 
...
Load popup content
offer.open = true;

次に、関数を onpopuphiding に追加して、変数を再度 false に設定しました。

この方法では、パネルがリロードされず、メニューリストが期待どおりに機能します。

- 編集:

問題が完全に解決されないことが判明しました。メニューリストをクリックするとオプションが表示されますが(以前は表示されませんでした)、もう一度クリックすると、パネルが非表示になり、再び表示され、このソリューションが役に立たなくなります...

-- 編集 2:

別の解決策を見つけたと思います。

offers.start(event) をトリガーした explicitOriginalTarget.id が offers-panel かどうかを確認しています。そうであれば、パネルをロードします。そうでなければ、私は何もしません。

パネル/iframeのリロードをトリガーするものはわかりませんが、これによりその動作が修正されます

于 2013-06-17T11:36:18.463 に答える