XUL menulist重新加载面板onclick

时间:2013-06-14 06:52:35

标签: firefox firefox-addon xul

我将一个menulist的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>

每当我点击menulist时,函数“offer.start();”被调用,但我没有任何其他调用该函数,只是在onpopupshowing面板上,所以我猜在menulist上的某些事件可能会触发重载,但我不知道它是什么。

1 个答案:

答案 0 :(得分:0)

我用以下方法解决了这个问题:

添加

offer.open = false

然后在onpopupshowing函数“start”上添加:

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

然后在onpopuphiding中添加了一个函数,将该变量再次设置为false;

这样,面板不会重新加载,并且menulist按预期工作。

- 编辑:

事实证明它并没有完全解决问题。 我可以点击menulist并显示选项(我以前看不到),但是如果我再次点击它,面板会隐藏并再次显示,使这个解决方案无用......

- 编辑2:

我想我找到了另一种解决方案。

我正在检查触发offers.start(event)的explicitOriginalTarget.id是offer-panel。如果是,我加载面板。否则我什么都不做。

我不确定是什么触发了面板/ iframe的重新加载,但这解决了这种行为