<script language="JavaScript">
var x = 0;window.onbeforeunload = function()
{
setTimeout(test, 1);
return "exit?"
}window.onunload = function()
{
alert("onunload x=" + ++x);
}function test()
{
alert("test x=" + ++x);
}
</script>
依次显示:
onunload x=2
test x=1从变量值说明是后者先执行,对话框确实前者先跳出。Fx的事件模型?
...
msg = window.onbeforeunload();
... //在这句线程挂起,转而执行setTimeout里的代码,但test函数中有alert,又挂起,等待此线程 ret = confirm(msg, ..., YES | NO); if(ret == YES)
{
...
window.onunload();
...
} //线程完成,继续setTimeout里的代码 不知这样分析是否正确。
FF和其他浏览器一样,是可以同时出现多个alert的,包括关闭确认对话框和alert同时出现也可以。(通过弹出窗口的window.opener.alert可以实现)
<script language="JavaScript">
var x = 0;
function Demo()
{
setTimeout(A, 0);
x = 10;
x = 20; alert("Sleep") x = 30;
}function A()
{
alert("x=" + x);
}Demo();
</script>
结果是30.说明A是Demo函数全部运行完成后才在开始执行的,即使中间有个Sleep,A也没有开始执行。
用innerHTML在页面写值看看结果
load是页面加载运行,unload是卸载
onbeforeunload 是关闭