共用方式為


Режим совместимости и интеллектуальные настройки по умолчанию

В нескольких предыдущих статьях я рассказал, как Internet Explorer 8 отображает страницы в обычном, наиболее общем случае работы в режиме совместимости – варианте, предусматривающем наилучшую совместимость. Это создаёт некоторые технические проблемы при взаимодействии с существующим контентом Интернета, затрагивающими вопросы совместимости.

Некоторые из современных веб-сайтов рассчитаны на прежнее, не столь интероперабельное поведение Internet Explorer. Именно поэтому они не работают так, как предполагается, с режимом совместимости по умолчанию в Internet Explorer 8. Чтобы побороть это несоответствие, мы создали режимы Compatibility View и специальный X-UA-совместимый маркер «EmulateIE7» , – функции, которые пользователь и веб-разработчик могут включить, чтобы содержимое сайта лучше взаимодействовало с браузером. Эта статья посвящена некоторым ситуациям, когда Internet Explorer 8 использует интеллектуальные настройки по умолчанию, чтобы обеспечить наилучшую совместимость прямо «из коробки», без дополнительного вмешательства пользователей.

Многие сайты, созданные внутри корпоративных сетей (или локальных сетей, например, https://myportalsite/ совместимы с Internet Explorer 7 и ожидают от Internet Explorer, что он будет вести себя как 7-я версия. Чтобы сохранить совместимость с этими веб-сайтами и приложениями, которые необходимы для работы предприятий, Internet Explorer 8 автоматически переключается в режим совместимости при работе в зоне «Локальный Интранет». Исключение – сам компьютер и его адрес (127.0.0.1 + эквивалент по протоколу IPv6). Ресурсы по этим адресам по умолчанию открываются в стандартном режиме, чтобы предоставить разработчикам веб-контента и дизайнерам возможность тестировать создаваемые ими продукты, не используя для этого размещение в Интернете, – для экономии ресурсов.

Изменить настройки локального Интранета можно, сбросив флаг «Показывать ресурсы интранет в режиме совместимости» в Tools -> Compatibility View Settings.

clip_image002

Администраторы сетей могут настроить эти опции с помощью групповых политик. Они могут создать и управлять списком сайтов, внешних и внутренних, для которых предпочтительнее всего использовать режим совместимости. Использование этой политики в совокупности с политикой для локальной интранет-сети, в которой Internet Explorer 8 работает в режиме совместимости, помогает осуществить плавный переход информационной системы предприятий со стандартного режима IE7 на стандартный режим IE8.

Другим случаем, когда Internet Explorer использует интеллектуальные настройки по умолчанию – режимы для схем WebOC. Существует множество программ для Windows, как современных, так и не очень, использующих управляющий элемент WebBrowser, известный также как Trident. CorelDraw Graphics Suite, Encarta, Microsoft Office, Nero – вот лишь несколько наиболее известных примеров. Очевидно, что полное обновление всего программного обеспечения на ПК сопряжено с известными трудностями (разработчики должны написать обновление, пользователь должен его установить и т.д.). Это особенно серьёзная проблема для т.н. «коробочного» ПО, которое зачастую обновить намного сложнее и дороже, чем «живое» веб-приложение, не в последнюю очередь из-за выбранного метода доставки пользователю, – посредством физических носителей вместо загрузки по Интернету. Как и веб-приложения, эти программы настроены на определённое поведение Internet Explorer. В целях сохранения совместимости, для программ, использующих IE8 WebOC, страницы будут открываться в режиме совместимости. Стандартный режим можно задействовать, произведя следующие изменения в реестре:

[(HKEY_CURRENT_USER or HKEY_LOCAL_MACHINE)\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION]«MyApplication.exe» = dword 8000 (Hex: 0x1F40)

Наконец, в некоторых случаях речь может идти о «жёстких утверждениях», которые заставят браузер перейти в режим совместимости. Для тех, кто не очень хорошо знаком с этой концепцией, может оказаться полезной статья из Википедии, рассматривающая основные моменты:

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

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

Создавая новый механизм структурной обработки, встроенный в Internet Explorer 8, мы использовали стандартный метод настройки путей для кода, осуществляемый с помощью логики утверждений. Это оказалось очень важным моментом при разработке браузера, поскольку давало возможность выделить участки кода, вызывавшие ошибки, или неверные настройки, сделанные в процессе внедрения нового механизма обработки структур. Например, оригинальное воплощение некоторых механизмов масштабирования использовало настройку «занятая высота» (consumed height) – внутренний элемент, отслеживающий актуальную высоту пространства, занимаемого объектом, – который не мог иметь отрицательного значения. Эта настройка оказалось ошибочной для случаев, когда объект достигал отрицательного значения, выходя за рамки предписанных пограничных полей. Утверждение, задающее возможные значения для этого параметра, позволило нам найти и устранить ошибку.

Практически все утверждения были удалены из окончательного варианта кода. Это означает, что существуют определённые кодовые пути в новом механизме обработки структур, где, в случае ошибки, процесс обработки структуры может быть успешно возобновлён. Для этих путей утверждения были сохранены. В бета-версиях Internet Explorer 8, когда срабатывали эти жёсткие утверждения для обрабатываемых структур, браузер выдавал пустую страницу. Нашим мнением было: лучше показать пользователю пустую страницу, чем разрешать исполнение кода с ошибкой или отображать заведомо неверно обработанную структуру веб-документа. В окончательной версии мы усовершенствовали этот подход: в случае «жёстких утверждений» страница повторно обрабатывается в режиме совместимости. Другими словами, мы полагаем уместным представить проблематичную страницу так, как это сделала бы предыдущая версия браузера, – для пользователя это более дружественный вариант, нежели пустая страница.

clip_image004

clip_image006

Новые настройки InetCPL находятся здесь: Tools -> Internet Options -> Advanced -> Browsing enables / disables auto-recovery.

clip_image008

В случае ошибки весь домен будет отображаться в режиме совместимости – не только страница или раздел сайта. Это сделано не случайно: пользователи не должны испытывать трудности с просмотром страниц, если, например, некий баннер, появляющийся на страницах всего ресурса, вызывает срабатывание механизма интерпретации «жёстких утверждений». Новое всплывающее сообщение указывает, что произошло переключение в режим совместимости и объясняет, почему.

clip_image010

Переход в режим совместимости в результате автоматического восстановления страницы после сбоя всегда действует только в рамках текущей сессии. В случае просмотра содержимого сайтов в режиме InPrivate, режим совместимости также действует лишь в рамках текущей сессии, в то время как в обычном режиме браузера однажды включённый режим совместимости продолжает действовать при новом запуске Internet Explorer 8 (для всего домена). Другими словами, в случае, когда режим совместимости не активирован принудительно, стандартный режим просмотра восстанавливается после перезапуска браузера.

В случае срабатывания автовосстановления отображения для домена, кнопка режима совместимости появляется в активированном состоянии, а не скрытой или неактивной, как в нормальном режиме. Нажатие на кнопку режима совместимости на «восстановленном» сайте принудительно выполняет перезагрузку в стандартном режиме IE8. Проблема состоит в том, что выключение и включение режима совместимости при отображении контента, который вызывает срабатывание механизма обработки «жёстких утверждений», может запустить процесс циклического автовосстановления отображения: содержимое сайта требует включения режима совместимости, пользователь жмёт на кнопку режима совместимости, чтобы вернуться к стандартному режиму просмотра, сайт снова включает режим совместимости – и так до бесконечности.

Ресурсы, которые вызвали необходимость автовосстановления, заносятся в пользовательский список для режима совместимости (Tools -> Compatibility View Settings) автоматически и заключаются в скобки.

clip_image012

Скобки подчёркивают временное состояние. Эти «временные» домены можно удалить, однако повторное принудительное внесение такого домена в список режима совместимости будет «окончательным», т.е. без скобок.

Присутствие IE8 X-UA-совместимого тэга или заголовка HTTP (например, IE=8 или IE=EmulateIE8 + стандартные DOCTYPE) заставляет страницу оставаться в стандартном режиме отображения IE8 независимо от установок параметров автовосстановления отображения на клиенте (пользователь увидит пустую страницу в случае наличия в структуре страницы «жёсткого утверждения»). Разработчики могут проанализировать ошибку, принудительно загрузив страницу в режиме документа с помощью специальной инструментальной панели разработчика, что также отменит автовосстановление.

Мы стремились устранить все известные причины невозможности восстановления страниц в нашем механизме обработки структур перед тем, как будет выпущена окончательная версия. Для ситуаций, которые всё-таки будут происходить в процессе нормальной эксплуатации браузера, предусмотрено создание отчёта посредством механизма отчётов об ошибках Windows Error Reporting (WER). С его помощью мы можем получить стек ошибки целиком и, соответственно, воспроизвести, протестировать и устранить «жёсткие утверждения» так же, как мы это делаем со сбоями или зависаниями.

Конфигурация по умолчанию, запускающая браузер в стандартном режиме, помогает дизайнерам и разработчикам при создании нового поколения веб-страниц, приложений и практических навыков. В то же самое время мы осознаём последствия, а именно – новые проблемы и вызовы, встающие перед сообществом, например, вопросы совместимости существующего контента с новым браузером. Ситуации, рассматриваемые в статье, касаются взаимодействия и совместимости браузера и контента, и представляют собой сведения, которые могут помочь и разработчикам, и конечным пользователям.

Мы хотели бы услышать ваши отклики по вопросам совместимости. Пожалуйста, свяжитесь с нами через форму комментария и расскажите нам, как работает IE8 с сайтами, которые вы посещаете и приложениями, которые вы используете.

Скотт Дикенс (Scott Dickens),

координатор проекта