Элемент управления WebBrowser не корректно отображает страницы. Что делать?

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

В чём причина столь неадекватного поведения WebBrowser и как исправить положение?

Дело в том, что элемент управления WebBrowser это ни что иное как COM-оболочка для Internet Explorer, которая к тому же работает в режиме Internet Explorer 7. При этом данный режим используется по умолчанию не зависимо о того какая именно версия для Internet Explorer установлена на компьютере.

Существует два способа изменить режим работы WebBrowser:

  • Изменить режим работы по умолчанию через реестр;
  • Включить в заголовок веб страницы специальный мета-тег.

1.Изменение режима работы через реестр

Для этого необходимо изменить следующее значение в реестре Windows:

Последние цифры этого значения должны быть указаны в соответствии со следующей таблицей.

Значение Описание
11001 (0x2AF9) Работа в режиме Internet Explorer 11. Веб страницы отображаются в соответствии с директивой DOCTYPE. Если она отсутствует, браузер ведет себя так, как будто указана директива режима совместимости (Quirks DOCTYPE).
11000 (0x2AF8) Работа в режиме Internet Explorer 11. Веб страницы отображаются в стандартном режиме независимо от директивы DOCTYPE. Режим по умолчанию Internet Explorer11
10001 (0x2711) Работа в режиме Internet Explorer 10. Веб страницы отображаются в соответствии с директивой DOCTYPE. Если она отсутствует, браузер ведет себя так, как будто указана директива режима совместимости (Quirks DOCTYPE).
10000 (0x02710) Работа в режиме Internet Explorer 10. Веб страницы отображаются в соответствии с директивой DOCTYPE. Режим по умолчанию Internet Explorer10.
9999 (0x270F) Работа в режиме Internet Explorer 9. Веб страницы отображаются в соответствии с директивой DOCTYPE. Если она отсутствует, браузер ведет себя так, как будто указана директива режима совместимости (Quirks DOCTYPE).
9000 (0x2328) Работа в режиме Internet Explorer 9. Веб страницы отображаются в стандартном режиме независимо от директивы DOCTYPE. Режим по умолчанию Internet Explorer9
8888 (0x22B8) Работа в режиме Internet Explorer 8. Веб страницы отображаются в соответствии с директивой DOCTYPE. Если она отсутствует, браузер ведет себя так, как будто указана директива режима совместимости (Quirks DOCTYPE).
8000 (0x1F40) Работа в режиме Internet Explorer 8. Веб страницы отображаются в стандартном режиме независимо от директивы DOCTYPE. Режим по умолчанию Internet Explorer8
7000 (0x1B58) Работа в режиме Internet Explorer 7

 

Таким образом для работы WebBrowser в режиме Internet Explorer 11 в режиме по умолчанию для этого браузера значение в реестре должно быть следующим:

Более подробную информацию о конфигурировании через реестр можно прочитать в статье на MSDN: Internet Feature Controls (B..C).

У этого способа, помимо всего прочего, есть ещё целый ряд существенных «минусов»:

  • Вносимые изменение будут относиться не только к данной конкретной программе, а носить глобальный характер (HKEY_LOCAL_MACHINE определяет параметры всей операционной системы);
  • Для работы с реестром необходимы соответствующие права.

Поэтому, данный способ применять нежелательно.

2.Использование специального мета-тега

Для управления режимом отображения содержимого веб страниц в браузерах Internet Explorer 8 и выше используется мета тег X-UA-Compatible. Её синтаксис:

Режим отображение задаётся в атрибуте content в соответствии со следующей таблицей:

Значение Описание
IE=edje Работа в стандартном режиме самой последней доступной версии Internet Explorer независимо от директивы DOCTYPE.
IE=EmulateIE9 Работа в режиме Internet Explorer 9. Веб страницы отображаются в соответствии с директивой DOCTYPE. Если она отсутствует, браузер ведет себя так, как будто указана директива режима совместимости (Quirks DOCTYPE).
IE=9 Работа в режиме Internet Explorer 9. Веб страницы отображаются в стандартном режиме независимо от директивы DOCTYPE. Режим по умолчанию Internet Explorer9.
IE=EmulateIE8 Работа в режиме Internet Explorer 8. Веб страницы отображаются в соответствии с директивой DOCTYPE. Если она отсутствует, браузер ведет себя так, как будто указана директива режима совместимости (Quirks DOCTYPE).
IE=8 Работа в режиме Internet Explorer 8. Веб страницы отображаются в стандартном режиме независимо от директивы DOCTYPE. Режим по умолчанию Internet Explorer8.
IE=EmulateIE7 Работа в режиме Internet Explorer 7. Веб страницы отображаются в соответствии с директивой DOCTYPE. Если она отсутствует, браузер ведет себя так, как будто указана директива режима совместимости (Quirks DOCTYPE).
IE=7 Работа в режиме Internet Explorer 7. Веб страницы отображаются в стандартном режиме независимо от директивы DOCTYPE. Режим по умолчанию Internet Explorer8.

 

При помощи данного мета тега можно переключить браузер в режим отображения соответствующий и более ранним версиям, чем Internet Explorer 7. Однако вследствие их глубокого морального устаревания подробно останавливаться на этом не имеет смысла.

Данный способ является наиболее предпочтительным, но и он также имеет два серьёзных недостатка:

  • Мета-тег X-UA-Compatible должен располагаться на каждой отображаемой странице;
  • Вследствие предыдущего недостатка, если мета-тег X-UA-Compatible отсутствуе и нет возможности добавить его на страницу, проблема с отображением содержимого становится практически неустранимой при помощи данного способа.

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

  1. Для всех страниц, которые планируется отображать через WebBrowser следует включить в заголовок соответствующий мета-тег X-UA-Compatible.
  2. Если по каким-либо причинам это невозможно, для корректного отображения страницы выполнять вёрстку исходя из возможностей Internet Explorer

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *