среда, 4 января 2012 г.

Internet Explorer на страже стандартов =)

Броузер Internet Explorer хорошо известен тем, что старается уж очень четко следовать стандартам, разработанным ответственными комитетами типа W3C
Там, где остальные броузеры закрывают глаза на некоторые опечатки, небольшие огрехи вебмастеров, IE каленым железом выжигает всякую "крамолу" )) Вот несколько граблей, на которые пришлось наступить в последнее время:
1. <!DOCTYPE
Сегодня довольно долго бился над выяснением того, почему на одном из сайтов "слетает" верстка в IE , которая идеально выглядит в Chrome, Opera, Firefox.
Перелопатил все стили, исправил пару незначительных кроссброузерных различий, но в целом IE продолжал показывать мне совсем не то ,что остальные броузеры.
Причина оказалась банальна - в первой строке html-ответа не было директивы <!DOCTYPE ...>, после его добавления в базовый html-шаблон все сразу стало выглядеть так, как требовалось (с небольшими допустимыми для IE отличиями типа отсутствия теней у некоторых элементов).
Вот что пишет w3c об этой преамбуле: W3C-HTML5#DOCTYPE

2. js-движок и синтаксис записи словарей в js
Довольно много приходилось писать на perl и в последнее время на python. При записи структур типа:
my $dict = {
      'key1': 1,
      'key2': 2,
   }
давно выработалась привычка всегда ставить запятую после очередной записи в хеше, даже если она последняя - это позволяет избегать синтаксических ошибок при возможном будущем добавлении новых записей в этот словарь. Эта привычка меня недавно подвела при написании js-кода, содержащего в большом количестве структуры, подобные описанной выше.
Отладка кода проводилась в Chrome и Mozilla. Когда начал проверять работу в IE ошалел от кучи js-ошибок (при возникновении ошибок компилляции js - IE просто перестает рендерить страницу). Пришлось перелопатить все js исходники и повычищать последние запятые, которые оказались несоответствующими синтаксису описания словарей, к которому я так привык.
Теперь взял за правил ставить запятые ПЕРЕД элементами словаря ))

3. подчеркивания в именах хостов
На эти грабли наступал уже давно и , может быть, даже описывал на страницах этого блога. Но недавно, когда коллега начал в ярости постукивать по клавиатуре, я поинтересовался в чем у него проблема , понял, что он наступил на то же самое (спросил бы раньше))))
Пример: есть тестовый стенд одного веб-проекта. Тестируется в основном под Chrome, Mozilla. Начали проверять под IE. Полезли глюки в виде странной работы с куками. После ряда возгласов "мистика" стало ясным, что виноваты символы подчеркивания в имени тестового хоста, которые оказалиcь "не по стандарту".

4. зацикливание при редиректе из-за некорректного http-euiv
Вот такой вот код:
<meta http-equiv="Refresh" content="1; /" />
отлично понимается Chrome и Firefox - в результате выполняется редирект на главную страницу сайта.
В IE (например в 8.0) делается редирект на ту же самую страницу. В результате - ежесекундные бесконечные редиректы.
Чтобы сделать понятным для всех броузеров ,опять же обратимся к стандарту W3C-HTML5#PRAGMAS



Это далеко не полный список того, чему IE предельно жестко учит)) Буду пополнять эту коллекцию

2 комментария:

  1. Спецификация на то и нужна, что ей либо следуют строго, либо это не спецификация а так (что мы и видим в мире веб-технологий, где ни одна W3C спека толком ни кем не поддерживается, разве что XML-ная).

    1. При отсутствие доктайпа браузер обработает документ, пытаясь определить доктайп. Скорее всего IE тут определил неверно, но вина полностью на программисте, который не вставил доктайп. FF вроде и при XHTML-ном доктайпе обрабатывает обычную HTML страницу, чего делать не должен.

    2. Так ведут себя большинство парсеров во многих ЯП. Я тоже зачастую ставлю запятушки вначале ибо так удобнее двигать и добавлять элемены. Баг в других браузерах, что они не сообщают об ошибке.

    3. Подчеркивание в именах хостов запрещено, да. Например винда и не даст создать хост в имени которого подчеркивание. Думаю, что IE использует какую-нибудь стандартную виндовую библиотеку для создания URL, которая вполне законно ругается на невалидный URL (возможно ругается втихаря, что плохо).

    4. Прочел спеку - не нашел слов о том, что должен переходить на главную страницу. Явная бага в браузерах, которые это делают. IE вроде бы работает по спеке - раз в секунду пытается перегрузить текущую страницу.

    PS W3C-шный документ (html5, на который есть ссылки) не открылся в хроме и не работает навигация в IE. Справилась только mozilla. Это так о качестве работы организации w3c, которое у них обычно весьма посредственное.

    ОтветитьУдалить
  2. по п.2 - об ошибке сообщюают все броузеры ( в js-консоли можно увидеть всю информацию), но только IE перестает рендерить содержимое, наткнувшись на баг в js. По крайней мере у меня так было )

    спасибо за конструктивный комментарий :)

    ОтветитьУдалить