Там, где остальные броузеры закрывают глаза на некоторые опечатки, небольшие огрехи вебмастеров, 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 предельно жестко учит)) Буду пополнять эту коллекцию
Спецификация на то и нужна, что ей либо следуют строго, либо это не спецификация а так (что мы и видим в мире веб-технологий, где ни одна W3C спека толком ни кем не поддерживается, разве что XML-ная).
ОтветитьУдалить1. При отсутствие доктайпа браузер обработает документ, пытаясь определить доктайп. Скорее всего IE тут определил неверно, но вина полностью на программисте, который не вставил доктайп. FF вроде и при XHTML-ном доктайпе обрабатывает обычную HTML страницу, чего делать не должен.
2. Так ведут себя большинство парсеров во многих ЯП. Я тоже зачастую ставлю запятушки вначале ибо так удобнее двигать и добавлять элемены. Баг в других браузерах, что они не сообщают об ошибке.
3. Подчеркивание в именах хостов запрещено, да. Например винда и не даст создать хост в имени которого подчеркивание. Думаю, что IE использует какую-нибудь стандартную виндовую библиотеку для создания URL, которая вполне законно ругается на невалидный URL (возможно ругается втихаря, что плохо).
4. Прочел спеку - не нашел слов о том, что должен переходить на главную страницу. Явная бага в браузерах, которые это делают. IE вроде бы работает по спеке - раз в секунду пытается перегрузить текущую страницу.
PS W3C-шный документ (html5, на который есть ссылки) не открылся в хроме и не работает навигация в IE. Справилась только mozilla. Это так о качестве работы организации w3c, которое у них обычно весьма посредственное.
по п.2 - об ошибке сообщюают все броузеры ( в js-консоли можно увидеть всю информацию), но только IE перестает рендерить содержимое, наткнувшись на баг в js. По крайней мере у меня так было )
ОтветитьУдалитьспасибо за конструктивный комментарий :)