我试图让我的网页在IE 8中正常运行,我从这里发现:http://www.masykur.web.id/post/How-to-Make-Our-Website-to-be-Ready-for-IE8.aspx 那个,我的页面必须符合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">
<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>
.
.
.
然而,刷新页面似乎可以使其正常工作。
我在这里错过了什么吗?
更新
其中一个IE插件在禁用其正常工作后创建了此问题。感谢您的时间和答案:)
答案 0 :(得分:27)
对于IE试试:
window.onload = new function() { alert('hello');};
答案 1 :(得分:9)
这是一个非常古老的主题,但我找到了一个可以帮助其他人的解决方案。
我是通过动态注入的脚本向window.onload
添加一个函数(实际上是模仿外部脚本加载,原因在于此上下文中不重要)。正如本文所述,在IE8中的第一次加载时,window.onload
不会触发,但所有后续调用都会发生。
我发现如果我把它作为内部脚本放在HTML文件中,它每次都会起作用:
var windowOnload = window.onload || function() {};
window.onload = function() { windowOnload(); };
以上所有代码都是“不显眼地”初始化IE8的window.onload
。我怀疑IE8第一次无法触发window.onload
如果从外部脚本调用它,因为onload
事件尚未附加到窗口(或者在技术术语中,其类型未定义)。这似乎是第一次IE8正在做的事情:将onload
附加到窗口而不正确执行它。
上面的代码变得非常明显:我们只是强迫IE8识别onload
事件。我们不关心执行什么或不执行什么,所以我们只需确保通过已定义的任何现有window.onload
代码(仅作为预防措施)。
将此作为HTML的内部脚本非常重要(至少从我的测试开始)。
您的HTML看起来像这样(相关部分):
<script type="text/javascript">
var windowOnload=window.onload||function(){};window.onload=function(){windowOnload();};
</script>
<script type="text/javascript" src="script.js">
</script>
从我的测试中,清除缓存并重新加载页面后,我每次都成功触发window.onload
。
我希望这会有所帮助。
答案 2 :(得分:3)
您的JavaScript可能有错误,如果发生这种情况,之后的任何JavaScript都无法正常运行。
尝试删除对login.js和common.js的引用,并在有问题的函数中尝试提醒。
答案 3 :(得分:3)
我没有亲自测试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>
如果此测试按预期工作,请尝试围绕内部JavaScript块的CDATA位。
然后,如果这不能按预期工作,那么它上面的外部JavaScript可能会阻止你的onload被触发。上一张海报提到了这一点。此时,请尝试使用错误控制台或调试程序指明方向。
答案 4 :(得分:1)
onload会触发。这些资源可能需要花费很长时间才能在第一次加载(缓存之前)。另一种可能性是代码中的错误只影响IE,因为停止脚本(但只是第一次是奇怪的)。
答案 5 :(得分:0)
如果使用Apache与其他Web服务器(IIS?)获得不同的结果并使用IE8比较最终结果,那么差异必须在要发送的内容类型标头中。获取适用于您的平台的wget实用程序,并查看生成的标头。如果你在Windows上,那么Portable Apps version of the GUI wget非常好。
答案 6 :(得分:0)
以下代码适用于我。当我在Firefox中加载页面时,我立即看到警报。当我第一次在IE 8中加载页面时,它会警告我有关活动内容的信息。如果我允许阻止的内容,它会要求我确认,我这样做。然后警报按预期显示。如果这对您不起作用,请在另一台计算机上尝试使用IE 8,或者开始删除页面中的代码以检查错误。您可以进行二分查找:注释掉页面的前半部分并查看警报是否出现;如果它仍然没有,那么取消注释上半场并注释下半场。根据需要重复,直到您将其缩小到违规代码。顺便说一句,您不需要符合IE8的XHTML。 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>
答案 7 :(得分:0)
我知道这是一个古老的问题,但我只是面对同样的事情。
window.onload=function() { alert('hello');};
的处理方式与
不同 window.onload= new function() { alert('hello');};
此处的关键字为new
。
我的JS在到达(onload =)部分时终止,直到我在'function'之前添加了'new'这个词。即使它在我的localhost中没有'new'也能很好地工作,但是一旦我把它放到网上,它就会在我添加'new'之后才能工作。
答案 8 :(得分:0)
老问题,但我遇到了同样的问题,但事实证明这是另一个问题。我的问题是我做<script type="application/javascript">
<IE9
不理解或尝试运行。要使其适用于较旧的浏览器,您仍然必须使用text/javascript
,即使这在技术上不是正确的类型......