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 函数“开始”上,添加:

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 回答