2010-09-30 52 views
2

我有一个问题,只是刚刚开始发生在ie8下。我的代码已经工作了一段时间,并仍然在Firefox中工作正常,但由于某种原因,原型停止调用dom:loaded我的事件侦听器。fireContentLoadedEvent被过早调用,即在

我通过document.observe("dom:loaded", callback);

重视他们的一些调试(我讨厌IE的调试器!)我来是原型的fireContentLoadedEvent(LN 4102)的DOM之前被称为孔装载的结论(几乎后紧接在document.write("<script...")之后)。

fireContentLoadedEvent正在从处理要求时!document.addEventListener 即(见的prototype.js线4125)

... 
    if (document.addEventListener) { 
    ... 
    } else { 
    document.write("<script id=__onDOMContentLoaded defer src=//:><\/script>"); 
    $("__onDOMContentLoaded").onreadystatechange = function() { 
     if (this.readyState == "complete") { 
     this.onreadystatechange = null; 
     fireContentLoadedEvent(); 
     } 
    }; 
    } 
    ... 

没有任何人谁了解这一机制有关于为什么它可能过早地触发任何想法?

回答

1

我想通了........... !!

在IE中,如果你的页面加载过程中更改任何元素的innerHTML,所有的“延期”脚本过早加载中...

我在线的页面加载过程中的javascript的操作,改变一个元素的innerHTML一个并推迟这个脚本解决了我的问题。

所以我需要记住的是:

永远不会改变innerHTML,直到页面加载后!