window.onload()在第一次拍摄时没有使用IE 8触发

时间:2009-05-20 07:51:40

标签: javascript html internet-explorer xhtml internet-explorer-8

我试图让我的网页在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插件在禁用其正常工作后创建了此问题。感谢您的时间和答案:)

9 个答案:

答案 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,即使这在技术上不是正确的类型......