动态 HTML 加 window.onload 在 IE 上不起作用

Posted

技术标签:

【中文标题】动态 HTML 加 window.onload 在 IE 上不起作用【英文标题】:Dynamic HTML plus window.onload won't work on IE 【发布时间】:2012-06-09 14:23:42 【问题描述】:

我对@9​​87654321@ 有一些困难,就像这样:

我正在使用jquery.magiclick.js 填充div 的innerhtml,并通过AJAX 调用获取具有一些img 定义的xml。函数调用这个magiclick函数驻留在document.ready像这样:

$().ready(function () 
    loginBanner();
);

我在另一个 js 中定义了一个window.onload 函数。这不是必需的,但我将包含代码以使自己更清楚。如果之前定义了一个函数,它会简单地调用window.onload 函数,然后将该函数作为参数传递。就是这样:

    function addLoadEvent(func) 
      var oldonload = window.onload;
      if (typeof window.onload != 'function') 
        window.document.body.onload = function()
            alert("onLoad-1");
            func();
        ;
       else 
            window.document.body.onload = function() 
                alert("onLoad-1");
                if (oldonload) 
                    oldonload();
                
                func();
            ;
      
    

我在页面底部用函数参数调用这个函数。

我的期望是它会在文档准备好后获取 img 定义,并且由于定义包含 img 引用,它会获取图像数据然后执行我的onload 函数。它在 Firefox 上运行良好,但在 IE 上不行。

在 IE 中,它调用了获取 xml 的 magiclick 函数,然后调用了我的 onload 函数,但在执行 onload 函数时,尚未获取 xml 文件。

我坚持这一点,任何帮助将不胜感激。

那么,有没有人知道我可能做错了什么?

【问题讨论】:

【参考方案1】:

AJAX 是异步的,无需完成即可触发窗口加载

在 ajax 成功回调中调用您的代码

以jQuery AJAX简写方法$.get()为例:

$.get( url, function(data)
  /* AJAX success, run  code here */
)

【讨论】:

我实际上是在回调中调用一个函数来填充 div 的 innerHTML。我在其中插入了一些 img 标签,所以它应该获取图像数据。你是说因为 ajax 是异步的,所以我的 img 定义也是异步的,这会导致 window.onload 在图像到达之前触发。我对吗?这就是我插入 img 标签的方式: $('').html('');我可以为这些图像定义一个 onload 函数吗? 是的,解释是正确的。 onload 只知道源 html 中存在的图像标签。请在 SO 或 google 中搜索图像加载方法

以上是关于动态 HTML 加 window.onload 在 IE 上不起作用的主要内容,如果未能解决你的问题,请参考以下文章

window.onload中动态获得img的高度

在html中使用window.onload和onload的区别

JS:window.onload的使用

第一百一十八节,JavaScript,动态加载脚本和样式

被引用的外部JS存在window.onload时,判断当前页面是否已存在window.onload,并进行相应处理

的一个错误