При работе с элементом управления WebBrowser, который входит в состав большинства библиотек для разработки под Windows, довольно часто возникают проблема некорректного отображения веб страниц. Особенно, если речь на странице используются достаточно современные технологии.
В чём причина столь неадекватного поведения WebBrowser и как исправить положение?
Дело в том, что элемент управления WebBrowser это ни что иное как COM-оболочка для Internet Explorer, которая к тому же работает в режиме Internet Explorer 7. При этом данный режим используется по умолчанию не зависимо о того какая именно версия для Internet Explorer установлена на компьютере.
Существует два способа изменить режим работы WebBrowser:
- Изменить режим работы по умолчанию через реестр;
- Включить в заголовок веб страницы специальный мета-тег.
1.Изменение режима работы через реестр
Для этого необходимо изменить следующее значение в реестре Windows:
1 2 3 4 5 6 7 8 |
HKEY_LOCAL_MACHINE (либо HKEY_CURRENT_USER) SOFTWARE Microsoft Internet Explorer Main FeatureControl FEATURE_BEHAVIORS contoso.exe = (DWORD) 00000000 |
Последние цифры этого значения должны быть указаны в соответствии со следующей таблицей.
Значение | Описание |
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 в режиме по умолчанию для этого браузера значение в реестре должно быть следующим:
1 2 3 4 5 6 7 8 |
HKEY_LOCAL_MACHINE (либо HKEY_CURRENT_USER) SOFTWARE Microsoft Internet Explorer Main FeatureControl FEATURE_BEHAVIORS contoso.exe = (DWORD) 00011000 |
Более подробную информацию о конфигурировании через реестр можно прочитать в статье на MSDN: Internet Feature Controls (B..C).
У этого способа, помимо всего прочего, есть ещё целый ряд существенных «минусов»:
- Вносимые изменение будут относиться не только к данной конкретной программе, а носить глобальный характер (HKEY_LOCAL_MACHINE определяет параметры всей операционной системы);
- Для работы с реестром необходимы соответствующие права.
Поэтому, данный способ применять нежелательно.
2.Использование специального мета-тега
Для управления режимом отображения содержимого веб страниц в браузерах Internet Explorer 8 и выше используется мета тег X-UA-Compatible. Её синтаксис:
1 |
<meta http-equiv="X-UA-Compatible" content="..." /> |
Режим отображение задаётся в атрибуте 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, в любом случае, вполне решаема. В тоже время исходя из всего вышесказанного, если веб страница изначально разрабатывается с учётом возможного просмотра с помощью данного элемента управления, при её создании имеет придерживаться следующих простых рекомендаций:
- Для всех страниц, которые планируется отображать через WebBrowser следует включить в заголовок соответствующий мета-тег X-UA-Compatible.
- Если по каким-либо причинам это невозможно, для корректного отображения страницы выполнять вёрстку исходя из возможностей Internet Explorer
Добавить комментарий