Internet Explorer… Не удалось открыть узел. Операция прервана.
IE, JavaScript, Работа Март 29th. 2009, 11:35дпВсе веб-разработчики прекрасно знают на собственном опыте, каким непредсказуемым бывает IE в разнообразных ситуациях, имея на все собственное мнение, которое, как известно, хрен оспоришь. И, казалось бы, ничто уже не может удивить.
Однако ж нет, может! 🙂
В одном из проектов была замечена удивительная странность: периодически в IE при загрузке некоторых страниц сайта вдруг вылетало сообщение «Не удалось открыть узел http://www.example.com/. Операция прервана» или «Internet Explorer cannot open the Internet site http://www.example.com. Operation aborted». Причем ошибка возникала только в IE, в других браузерах страницы загружались идеально.
При нажатии на кнопку OK часть загруженной страницы закрывалась (да, при этом IE иногда успевал отобразить часть страницы) и замещалась стандартной страницей ошибки «Невозможно отобразить страницу»/»Internet Explorer cannot display the webpage».
What the fuck?! — подумал я. Что за непонятная ерунда и как от нее избавиться? Ведь страница закрывается раньше, чем можно отследить вообще что-нибудь. Пришлось обратиться в Google. Как обычно, я оказался не одинок в своих бедах с IE. После нескольких испытаний наконец-то была определена причина ошибки и найдено ее решение.
Итак, вся проблема была в том, что IE очень не любит JS-скрипты, которые пытаются добавить элементы в существующую структуру DOM. И это часто может приводить к отключению системы обработки скриптов и полной отмене рендеринга страницы в IE.
Ниже рабочий пример закодированной страницы, которая заставляет IE падать с такой же ошибкой:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html> <head> <title>Internet Explorer: Operation Aborted. Sample error.</title> </head> <body> <table> <script> document.body.appendChild(document.createElement('div')) </script> </table> </body> </html>
Одно из наиболее простых решений — дождаться, пока структура DOM будет полностью обработана в браузере. Для этого можно использовать событие window.onload. Многие Javascript фреймворки имеют собственные реализации этого события, например, в JQuery есть собственное событие $(document).ready. Кстати, именно это событие при использовании JQuery забыли предыдущие разработчики проекта, в котором мне довелось поучаствовать.
Ниже пример решения с использованием события window.onload:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html> <head> <title>Internet Explorer: Operation Aborted. Sample solution.</title> </head> <body> <ul> <script> window.onload = function(){ document.body.appendChild(document.createElement('div')) } </script> </ul> </body> </html>
Таким образом, создаем обертку и ждем полной загрузки страницы перед запуском скриптов.
P.S.: IE8 уже не умирает, однако выдает ошибку в JS коде.
P.P.S.: Кто-нибудь знает, почему может не работать плагин для подсветки кода в WP? Я пытался использовать плагин WP-Syntax (http://wordpress.org/extend/plugins/wp-syntax/), однако даже просто при переходе из HTML редактора в визуальный редактор теряется большая часть кода. И даже если сохраниться при работе с HTML кодом — при выводе какая-то ерунда получается. Видимо, в WP стоит какой-то дополнительный фильтр HTML кода, но я не слишком хорошо знаю WP, чтобы от этого избавиться.
P.P.S.2: Уважаемые посетители блога и конкретно данной страницы — прошу принять во внимание, что данное решение подходит для веб-разработчиков и только для них. Я не в состоянии (да и не хочу) определять, почему лично у Вас не загружается какой-либо сайт, даже если он выдает такое же сообщение. Благодарю за понимание.
22 Янв 2013 в 17:02
Спасибо большое за статью, аналогичная ситуация была в ие7, помогло!!!Спасибо!!!!
25 Окт 2013 в 07:43
Cайт не отображается в Интернет Експлорер http://www.amoretravel.com.ua/ . Нет желания вникать во все тонксоти. Кто поможет? Платно. Мой и-мейл. anna@amoretravel.com.ua
2 Дек 2016 в 01:05
Причем после настройки роутера один раз сайт открылся, я уже обрадовался, но через некоторое время он опять перестал запускаться.