我将一个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上的某些事件可能会触发重载,但我不知道它是什么。
答案 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的重新加载,但这解决了这种行为