fireContentLoadedEvent вызывается преждевременно, т.е.

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

я прикрепляю их через 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();
      }
    };
  }
  ...

есть ли у кого-нибудь, кто понимает этот механизм, какие-либо идеи относительно того, почему он может срабатывать преждевременно?


person pstanton    schedule 30.09.2010    source источник


Ответы (1)


я понял........... !!

в IE, если вы измените innerHTML любого элемента во время загрузки страницы, все "отложенные" скрипты будут загружены преждевременно...

одна из моих встроенных процедур javascript меняла innerHTML элемента во время загрузки страницы, и задержка этого скрипта решила проблему для меня.

поэтому мне нужно помнить следующее:

никогда не меняйте innerHTML до загрузки страницы!

person pstanton    schedule 30.09.2010