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

Man*_*har 27 html javascript xhtml internet-explorer 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>
     .
     .
     .
Run Code Online (Sandbox Code Playgroud)

然而刷新页面似乎使它工作.

我在这里错过了什么吗?

更新:

其中一个IE插件在禁用其正常工作后创建了此问题.谢谢你的时间和答案:)

小智 28

对于IE尝试:

window.onload = new function() { alert('hello');};
Run Code Online (Sandbox Code Playgroud)

  • 这会立即执行该函数作为new的副作用.onload设置为对象创建的结果!(新对象) (9认同)

小智 9

这是一个非常古老的线程,但我发现了一个可能有助于其他人的解决方案

window.onload通过动态注入的脚本添加了一个函数(实际上模仿外部脚本加载的原因在此上下文中并不重要).如本文所述,在IE8中的第一次加载时,window.onload不会触发,但所有后续调用都会触发.

我发现如果我把它作为内部脚本放在HTML文件中,它每次都会起作用:

var windowOnload = window.onload || function() {};
window.onload = function() { windowOnload(); };
Run Code Online (Sandbox Code Playgroud)

以上所有代码都是"初始化"IE8的window.onload不引人注目的.我怀疑window.onload如果从外部脚本调用它,IE8 第一次无法触发,因为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>
Run Code Online (Sandbox Code Playgroud)

从我的测试,清除缓存和重新加载页面,我已经window.onload成功触发每次.

我希望这有帮助.


Spl*_*iFF 1

onload 在加载所有内容(包括外部图像等)后触发。这些资源可能在第一次加载时需要很长时间(在缓存之前)。另一种可能性是您的代码中的错误仅影响 IE,因为停止您的脚本(但只有第一次是奇怪的)。