Javascript window.onload()在第一次射击中未使用IE 8开火
我正在尝试使用IE 8使我的页面正常工作,我从这里发现: 也就是说,我的页面必须符合XHTML 1.0,至少符合CSS 2.1,我使我的页面和CSS兼容的警告很少,但仍然是window.onload()未启动。有人遇到过这个问题吗 以下是代码片段:Javascript window.onload()在第一次射击中未使用IE 8开火,javascript,html,internet-explorer,xhtml,internet-explorer-8,Javascript,Html,Internet Explorer,Xhtml,Internet Explorer 8,我正在尝试使用IE 8使我的页面正常工作,我从这里发现: 也就是说,我的页面必须符合XHTML 1.0,至少符合CSS 2.1,我使我的页面和CSS兼容的警告很少,但仍然是window.onload()未启动。有人遇到过这个问题吗 以下是代码片段: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&g
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=8"/>
<title>Testing</title>
<link rel="stylesheet" href="test.css" type="text/css"></link>
<script type="text/javascript" src="login.js"></script>
<script type="text/javascript" src="common.js"></script>
<script type="text/javascript">
window.onload = function()
{
// Not coming here at all on first shot
}
</script>
</head>
<body>
.
.
.
测试
window.onload=函数()
{
//第一枪就不来了
}
.
.
.
然而,刷新页面似乎可以让它工作
我是不是遗漏了什么
更新:
一个IE插件在禁用其正常工作后造成了这个问题。感谢您的时间和回答:)在加载所有内容(包括外部图像等)后,onload将启动。这些资源在第一次加载时(在缓存之前)可能需要很长时间。另一种可能是代码中的错误只会影响IE,因为它会停止脚本(但只有第一次是奇数)。如果使用Apache和其他web服务器(IIS?)获得不同的结果,并使用IE8比较最终结果,则不同的结果必须在发送的内容类型标头中。获取平台的wget实用程序并查看生成的标题。如果您使用的是Windows,那么它就相当不错。下面的代码对我很有用。当我在Firefox中加载页面时,我会立即看到警报。当我第一次在IE8中加载页面时,它会警告我活动内容。如果我允许被阻止的内容,它会要求我确认,我会这样做。然后,警报将按预期显示。如果这对您不起作用,请在另一台计算机上尝试IE 8,或者开始删除页面中的代码以检查错误。您可以进行二进制搜索:注释掉页面的前半部分,查看是否出现警报;如果仍然没有,则取消对前半部分的注释,并注释掉后半部分。根据需要重复,直到您将其缩小到不符合要求的代码。顺便说一句,您不需要XHTML来满足IE8的要求。HTML工作得很好,实际上有一些优势
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=8"/>
<title></title>
<style type="text/css">
</style>
<script type="text/javascript">
window.onload=function() { alert('hello');};
</script>
</head>
<body>
</body>
</html>
window.onload=function(){alert('hello');};
您的JavaScript中可能有错误,如果发生这种情况,之后的任何JavaScript都将无法正常运行
尝试删除对login.js和common.js的引用,并在有问题的函数中尝试一个警报。我没有IE8要亲自测试,但是这个测试做什么
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Test IE 8</title>
<script type="text/javascript">
/* <![CDATA[ */
window.onload = function(){alert('Good morning!');}
/* ]]> */
</script>
</head>
<body>
<h1>Hello</h1>
<body>
</html>
测试IE 8
/* */
你好
如果此测试按预期工作,请尝试内部JavaScript块周围的CDATA位
然后,如果这不能像预期的那样工作,那么它上面的外部JavaScript中可能有某种东西阻止启动onload。上一张海报提到了这一点。此时,请尝试使用错误控制台或调试器来指明方向。对于IE,请尝试:
window.onload = new function() { alert('hello');};
这是一个相当古老的线程,但我找到了一个解决方案,可能会帮助其他人 我通过一个动态注入的脚本向
window.onload
添加了一个函数(实际上是为了模拟外部脚本加载,原因在本文中并不重要)。如本文所述,在IE8中的第一次加载时,窗口.onload
不会启动,但所有后续调用都会启动
我发现,如果我将其作为内部脚本放入HTML文件中,它每次都会工作:
var windowOnload = window.onload || function() {};
window.onload = function() { windowOnload(); };
上面的代码所做的只是“初始化”IE8的窗口。onload
不引人注目。我怀疑IE8第一次未能触发window.onload
,如果它是从外部脚本调用的,因为onload
事件尚未附加到window(或者用技术术语来说,它的类型未定义)。IE8似乎第一次这样做:在没有正确执行的情况下将onload
附加到窗口
上面的代码变得非常明显:我们只是强迫IE8识别onload
事件。我们不关心执行什么或不执行什么,所以我们只需确保管道通过任何现有的窗口。onload
已经定义的代码(作为预防措施)
将其作为HTML的内部脚本非常重要(至少在我的测试中是这样)
因此,您的HTML将如下所示(相关部分):
var windowOnload=window.onload | | function(){};window.onload=function(){windowOnload();};
根据我的测试,在清除缓存并重新加载页面后,我每次都成功触发window.onload
我希望这能有所帮助。我知道这是一个老问题,但我也面临同样的问题
window.onload=function() { alert('hello');};
被区别对待
window.onload= new function() { alert('hello');};
这里的关键字是new
我的JS在到达(onload=)部分时终止,直到我在“function”之前添加了单词“new”。即使在我的本地主机中没有“new”也可以正常工作,但一旦我把它放到网上,直到我添加了“new”之后它才会工作 老问题,但我也有同样的问题,但结果是另一个问题。我的问题是我做了
,排除了第一种可能性,因为onload我只是调用一个设置数字的javascript函数。我正在研究我的代码中的任何错误,我刚刚编写了一个示例代码,它在IE 8中使用onload时运行良好(但是onload内容被此错误阻止:“为了帮助保护您的安全,Internet Explorer限制此网站运行脚本…”每次,我都必须“允许”使其工作).我发现如果Apache正在呈现页面,则onload不会启动。我有一个示例代码可以演示这一点。我想您可能会误解。不管你的onload处理程序实际上做了什么,重要的是什么
window.onload= new function() { alert('hello');};