希望其他人确认这一点并讨论为什么会这样。
index.htm(此处只显示javascript函数)
function openDialog(n) {
if (typeof(window.showModalDialog) == 'object') { /* Ensure of browser support */
var sURL = 'modeless.htm'; /* Set the URL */
var oWin = window.showModelessDialog(sURL); /* Create new modeless window */
}
else {
alert('"showModlessDialog" not supported!');
}
}
modeless.htm
<html>
<head>
<title>Modeless dialog</title>
</head>
<body bgcolor="#ff0000" text="#ffffff" onLoad="alert('Modeless is now loaded')">
<center>
<h1>Modeless</h1>
</center>
<script type="text/javascript" language="JavaScript">
/* If the next line is included, it prevents the onLoad event occurring in MSIE v7 */
alert('This alert stops the onLoad event in MSIE v7!');
</script>
</body>
</html>
答案 0 :(得分:1)
看来IE7正在显示正确的行为。按顺序读取和解析HTML,包括脚本。当解析器到达javascript警报时,它会执行它并等待返回。然后,它可以完成解析页面并引发onLoad事件。
如果要在加载页面后显示警报,则必须自己处理onLoad事件。您可以通过以下方式进行本地操作:
window.onload = function() {
//do stuff here
}
或者,你可以使用任何数量的javascript库,比如jQuery:
$(document).ready(function() {
//do stuff here
});
答案 1 :(得分:0)
你确定不是你的内联onload事件正在停止它吗?下面的代码对我有用。
INDEX.HTM
<html>
<head>
<title>Index</title>
<script type="text/javascript" language="JavaScript">
function openDialog() {
if (window.showModalDialog) {
var sURL = 'Modeless.htm';
var oWin = window.showModelessDialog(sURL);
}
else
{
alert('"showModlessDialog" not supported!');
}
}
function addEventSimple(obj,evt,fn) {
if (obj.addEventListener)
obj.addEventListener(evt,fn,false);
else if (obj.attachEvent)
obj.attachEvent('on'+evt,fn);
}
function removeEventSimple(obj,evt,fn) {
if (obj.removeEventListener)
obj.removeEventListener(evt,fn,false);
else if (obj.detachEvent)
obj.detachEvent('on'+evt,fn);
}
addEventSimple(window, "load", openDialog);
</script>
</head>
<body text="#ffffff">
<h1 align="center">Index</h1>
</body>
</html>
Modeless.htm
<html>
<head>
<title>Modeless dialog</title>
<script type="text/javascript" language="JavaScript">
addEventSimple(window, "load", showAlert);
function showAlert() {
alert('Modeless is now Loaded');
}
function addEventSimple(obj,evt,fn) {
if (obj.addEventListener)
obj.addEventListener(evt,fn,false);
else if (obj.attachEvent)
obj.attachEvent('on'+evt,fn);
}
function removeEventSimple(obj,evt,fn) {
if (obj.removeEventListener)
obj.removeEventListener(evt,fn,false);
else if (obj.detachEvent)
obj.detachEvent('on'+evt,fn);
}
</script>
</head>
<body text="#ffffff" >
<h1 align="center">Modeless</h1>
<script type="text/javascript" language="JavaScript">
/* If the next line is included, it prevents the onLoad event occurring in MSIE v7 */
alert('This alert stops the onLoad event in MSIE v7!');
</script>
</body>
</html>
注意:出于某种原因,我需要清除浏览器缓存以对无模式窗口进行任何更改以进行更新。
答案 2 :(得分:0)
我认为在无模式对话框的HTML主体中使用alert()存在一些混淆。 以下几点可以更容易地解释观察到的行为:
只有在完全下载并呈现文档时才会触发onload处理程序。因此,警报的执行将延迟onload处理程序的执行,直到用户解除警报,并解析和呈现文档的其余部分。
The Opera Developer Community article on timing and synchronization in JavaScript(即使它没有特别谈到IE)在这种情况下是一篇非常有用的文章。
更新:我尝试在服务器(Apache Tomcat)和文件系统之外运行类似的代码。看起来当我从文件系统打开index.html而不是从服务器打开时,会出现所描述的行为。 IE的区域设置可能在这里工作。