有一些(脏旧的)代码基本上执行以下操作
<overlay id="slomozOverlay"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<dialog id="commonDialog"
onload="commonDialogOnLoad(); myLoad();"
ondialogaccept="myAccept(); Dialog.onButton0(); return true;">
<script type="application/x-javascript" src="chrome://myjar/overlay.js" />
</dialog>
</overlay>
名称已更通用,但overlay.js
提供myLoad
和myAccept
因为使用addEventListener
来接收免于
以下是尝试更改结构的示例。
<overlay id="myOverlay"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<script type="text/javascript"><![CDATA[
window.addEventListener("load", function()
{
// code here equivelant to myLoad
// find button
button.addEventListener("command", function() { myAccept(); }, false);
}, false);
]]></script>
<dialog id="commonDialog"/>
</overlay>
现在我尝试进行此更改时似乎遇到的问题是myLoad
要求onLoad的原始对话框完成其所做的一些更改 - 例如显示复选框。
即使那个在按钮上添加事件的地方似乎完全被忽略了。
因此,我尝试对事件使用loadComplete
,并注意到行为没有变化,myLoad
仍然在commonDialogOnLoad
之前运行。
是否有某种方法可以指定最后运行事件,还是使用其他一些将在以后运行的事件? 关于如何处理此问题的其他建议是什么?
答案 0 :(得分:0)
您无法确定执行load
个事件处理程序的顺序。通常的方法是在setTimeout
事件处理程序中以{0}延迟运行load
:
window.addEventListener("load", function(event)
{
window.setTimeout(function()
{
// Your code here
}, 0);
}, false);
此处唯一的问题 - 窗口是在load
事件后立即绘制的,因此您的更改可能会导致可见的重绘。