Jump to content
  • 0

Управление режимами браузера


rash
 Share

Question

В процессе ковыряния с этой замечательной метой встретил ситуацию, которую с наскока объяснить не могу и официальная документация пролить свет на происходящее не позволяет.

Если верить документации из MSDN, то в мете может находиться список режимов, и браузер выберет из этого списка самый новый поддерживаемый режим. То есть

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7, IE=EmulateIE9">

выберет в IE 8 эмуляцию седьмого, в девятом — эмуляцию девятого.

Собственно, вопрос. Почему код

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7, IE=edge">

переключает IE 8 в эмуляцию седьмого, а IE 9 оставляет в режиме девятого. Если верить документации, то восьмой ведь тоже посмотрев на edge должен был перейти в режим восьмого?

Собственно, вопрос: почему так? Как понять происходящее?

Link to comment
Share on other sites

19 answers to this question

Recommended Posts

  • 0

Там есть непонятный мне момент, "IE=edge всегда использует последний доступный стандартный режим отображения независимо от <!DOCTYPE>." Доступный в смысле если это 8, то последний доступный для него 8, или, например, если там верстка - говнокод, то последний доступный понимает сам, что "о нет, 8 чюда не проканает". Понимаю, глупостиь написал, но, собственно, цитирую.

Честно скажу, я никогда не пользовался этой штукой и пользоваться врятли буду (хотя, зарекаться твердо не стоит"). Но думаю, ничего удивительного, если это очередной баг.

Link to comment
Share on other sites

  • 0

IE8 не "знает", что существует версия IE9, поэтому может переключаться только в режим IE8 и IE7. Здесь же его насильно заставляют перейти в IE7. IE9 берёт значение edge, вот здесь чётко написано в таблице почему (IE=edge => IE9 mode)

http://msdn.microsoft.com/en-us/library/ff955275%28v=VS.85%29.aspx

Link to comment
Share on other sites

  • 0

Собственно, мне казалось, что и восьмой должен прочитать edge и остаться восьмым, так как это для него максимальная поддерживаемая версия.

В таблице сказано, что edge — это IE 9, но в заголовке таблицы также явно сказано, что рассматривается браузер IE 9, то есть для восьмого, мне казалось, что edge == IE 8.

Link to comment
Share on other sites

  • 0

IE8 не "знает", что существует версия IE9, поэтому может переключаться только в режим IE8 и IE7. Здесь же его насильно заставляют перейти в IE7. IE9 берёт значение edge, вот здесь чётко написано в таблице почему (IE=edge => IE9 mode)

http://msdn.microsoft.com/en-us/library/ff955275%28v=VS.85%29.aspx

Правильно ли я понимаю, что несколько значений через запятую нифига не равнозначны, и что если первый, допустим, что-то определил, то последний это не переопределяет, а всего лишь дополнение для иных версий браузеров, не указанных в предыдущих?

Собственно, мне казалось, что и восьмой должен прочитать edge и остаться восьмым, так как это для него максимальная поддерживаемая версия.

В таблице сказано, что edge — это IE 9, но в заголовке таблицы также явно сказано, что рассматривается браузер IE 9, то есть для восьмого, мне казалось, что edge == IE 8.

Я совершенно так же прочитал эту строку, поэтому уточняющий вопрос несколькими строками выше.

Link to comment
Share on other sites

  • 0

Ну как понимаю я, несколько значений через запятую как раз равнозначны, их порядок в теории значения не имеет совершенно, браузер просто выберет из списка самую новую версию, которую сможет сэмулировать, независимо от того, на каком месте в этом списке она находится.

Хотя в комментариях к какой-то статье было сказано, что лучше указывать версии в порядке возрастания все равно. Без объяснений.

Link to comment
Share on other sites

  • 0

но в данном примере и по ссылке - как раз-таки логика, подразумевающая четкую последовательность и неравнозначность записей.

если они равнозначны, то IE=EmulateIE7 не должно было иметь смысла вообще, все браузеры должны были идти в максимальный режим.

А ну или как вариант, IE=edge вопреки спекам, всегда означает IE9, и те кто не IE9 его просто игнорируют. в твоем случае, rash, очень похоже именно на это.

Link to comment
Share on other sites

  • 0

По ссылке в #3 внизу таблицы приписка, сразу не обратил на неё внимания:

For Windows® Internet Explorer® 8, IE=9, IE=Edge, and IE=EmulateIE9 result in IE8 mode.

Так что вопрос не закрыт и остаётся тем же, почему IE8 не желает переходить в режим edge. Кстати, какой доктайп стоит?

Link to comment
Share on other sites

  • 0

Вот еще фрагмент документации отсюда: http://msdn.microsoft.com/en-us/library/cc288325%28VS.85%29.aspx#DCModes

Edge mode tells Internet Explorer to display content in the highest mode available. With Internet Explorer 9, this is equivalent to IE9 mode. If a (hypothetical) future release of Internet Explorer supported a higher compatibility mode, pages set to edge mode would appear in the highest mode supported by that version. Those same pages would still appear in IE9 mode when viewed with Internet Explorer 9.

В вольном переводе:

Режим edge заставляет IE отобразить содержимое в самом последнем доступном режиме. Для IE 9 это эквивалентно режиму IE 9. Если (гипотетически) следующие версии IE будут поддерживать более высокий режим совместимости, страницы в режиме edge будут отображаться в самом последнем доступном в этой версии режиме. Эти же страницы отобразятся в режиме IE 9, когда будут отктыты в IE 9.

Тут также осторожно обходится IE 8.

Есть у меня подозрение, что IE 8 вообще не понимает ключевого слова edge, однако найти какую-то официальную таблицу поддержки в разных версиях IE пока не могу.

Гм, про доктайп вопрос хороший.

Стоит

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

До этого вопроса я только обратил внимание, что доктайп, вообще, указан.

Дополнено: к тому же IE 8 оставляет режим браузера в IE 8, а режим документа переводит в IE 7.

post-2029-0-18673600-1311773527.png

Link to comment
Share on other sites

  • 0

Похоже, с этими "эмуляциями режимов эмуляции эмуляции режимов эмуляции" горячие редмондские парни перехитрили сами себя :). В комменте на msdn некто ругается, что "пример написан с ошибкой, а работает так: <meta http-equiv="X-UA-Compatible" content="IE=5,8,9" > — IE написано один раз, номера версий через запятую". Про edge в примерах вообще ничего нет, к тому же, насколько я понял, основное назначение такого перечисления — исключить опред. режим, а с edge не всегда понятно, кого исключать...

Link to comment
Share on other sites

  • 0

Смотрим эту диаграмму

http://ieblog.members.winisp.net/misc/How%20IE9%20Determines%20Document%20Mode.svg

метатег Да > IE7Emulate Да > доктайп Да > идём в таблицу > сравниваем доктайп > режим документа: стандартный IE7

Пока всё правильно.

Похоже, с этими "эмуляциями режимов эмуляции эмуляции режимов эмуляции" горячие редмондские парни перехитрили сами себя :). В комменте на msdn некто ругается, что "пример написан с ошибкой, а работает так: <meta http-equiv="X-UA-Compatible" content="IE=5,8,9" > — IE написано один раз, номера версий через запятую". Про edge в примерах вообще ничего нет, к тому же, насколько я понял, основное назначение такого перечисления — исключить опред. режим, а с edge не всегда понятно, кого исключать...

Если вспомнить, что номер версии указывать не обязательно, а можно ввести некоторое числовое значение вроде 7500, то вообще свихнуться можно, вычисляя поведение браузера.

Link to comment
Share on other sites

  • 0

Смотрим эту диаграмму

http://ieblog.members.winisp.net/misc/How%20IE9%20Determines%20Document%20Mode.svg

метатег Да > IE7Emulate Да > доктайп Да > идём в таблицу > сравниваем доктайп > режим документа: стандартный IE7

Пока всё правильно.

Эта схема кое-что проясняет, но запутывает еще сильнее ) Кажется, в ней не отражены как следует ситуации, когда в мете перечислено несколько версий.

В частности, получается, что до проверки edge вообще не доходит, и результат не должен зависеть от наличия edge, однако без него IE 9 сваливается в IE 7 (так и показывает блок-схема), а с ним остается в IE 9 (что противоречит схеме, так как она не рассматривает случай, когда указано и EmulateIE7 и edge, по схеме встретив EmulateIE7 браузер дальше значение не читает).

В общем, кажется я запутываюсь еще сильнее )

Link to comment
Share on other sites

  • 0

Ааа, ну это вообще к делу отношения практически не имеет, это моя ошибка, что обратил на это внимание. Мета не может влиять на режим браузера вообще никак, он выбирается до начала загрузки страницы.

Link to comment
Share on other sites

  • 0

http://msdn.microsoft.com/en-us/library/cc288325%28v=vs.85%29.aspx#Content

If a particular version of Internet Explorer supports more than one requested compatibility mode, it will use the highest available mode listed in the content attribute. You can use this fact to exclude specific compatibility modes, although this is not recommended. For example, the following header excludes IE7 mode.

<meta http-equiv="X-UA-Compatible" content="IE=9; IE=8; IE=5" >

Note The previous example is provided for illustrative purposes only; it should not be used in a production environment.

Вольный перевод через Гугл.

Если версия Internet Explorer поддерживает более одного требуемого режима совместимости, он будет использовать наивысший доступный режим, перечисленный в содержании атрибута. Вы можете использовать этот факт для исключения определенных режимов совместимости, хотя это не рекомендуется. Например, следующий заголовок исключает IE7 режим.

А вот замечание, как мне кажется, всё объясняет. Дескать, НЕ ИСПОЛЬЗУЙТЕ ЭТО НА САЙТЕ! Тогда становится понятным, почему в схеме нет перечисления, почему так странно работает браузер.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy