2009-04-06 17:14:50

Ошибка "операция прервана" в MS Internet Explorer 6 и 7

Про работу В мемориз JavaScript

Сегодня столкнулся с сабжем в wordpress. Оказалось причиной вроде как явился плагин LightBox 2, но проблема (по крайней мере на моем компе) плавающая т.е. возникает не всегда.

После копания в гугле вяснилось, что мокрософт знает о существовании проблемы "Internet Explorer cannot open the Internet site http://.com. Operation aborted.". Проблема возникает если "This problem occurs because a child container HTML element contains script that tries to modify the parent container element of the child container. The script tries to modify the parent container element by using either the innerHTML method or the appendChild method.". А если по русски "Возникает это, потому что дочерний контейнер содержит скрипт, изменяющий родительский контейнер.".

На мокрософте в качестве багфикса предлагют обновиться до IE 8 или править скрипты. Вот пример кривого скрипта (вызывающего ошибку и ИЕ):

<html>
  <body>
  <div>
  <script type="text/Javascript">
  document.body.innerHTML+="sample text";
  </script>
  </div>
  </body>
</html>

И вот пример как нужно правильно:  


<html>
  <body>
  <div>
  </div>
  <script type="text/Javascript">
  document.body.innerHTML+="sample text";
  </script>
  </body>
</html> 

В принципе все вполне понятно и откуда берется и как лечить, но вот что делать если нет возможности (или просто неохота копаться в коде), есть и тут решение:  тегу script надо добавить defer="defer" (говорим браузеру, что исполнять этот скрипт нужно после полной загрузки страницы).

Вот такой пример уже будет работать:

<html>
  <body>
  <div>
  <script type="text/Javascript" defer="defer">
  document.body.innerHTML+="sample text";
  </script>
  </div>
  </body>
</html> 

Ссылки по теме: