2010-09-30 3 views
2

У меня проблема, которая только-только началась с ie8. мой код работает некоторое время и по-прежнему отлично работает в firefox, но по какой-то причине прототип просто прекратил называть мои прослушиватели событий для dom:loaded.fireContentLoadedEvent вызывается преждевременно, т. Е.

я прикрепить их с помощью document.observe("dom:loaded", callback);

после некоторой отладки (я ненавижу отладчик в IE !!!) я пришел к выводу, что загружается прототип fireContentLoadedEvent (перло 4102) вызываются задолго до йота (почти сразу после 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 только после загрузки страницы!

Смежные вопросы