:: MVP ::
|
|
:: RSS ::
|
|
|
При разработке тонкого клиента на основе TWebBrowser довелось столкнуться с неприятной ситуацией, суть которой заключалась в некорректном
отображении загруженной страницы в этом компоненте. Я все время думал, что TWebBrowser использует движок той версии IE, которая установлена
в системе. В моем случае был установлен IE11, в котором исходная страница отображалась корректно, и каково же было мое удивление, когда в
моем клиенте контент страницы “поплыл”.
Поиск причины показал следующее – TWebBrowser использует интерфейсы от старых версий IE! Так, например, в Delphi XE3 (и, похоже, во всех
более поздних версиях), TWebBrowser использует интерфейсы IWebBrowser2 от IE7. Более старые версии (Delphi XE2 и ниже) используют интерфейс
от IE6 и ниже (Delphi 7, возможно, использует интерфейс от IE4).
Понятно, что старые версии IE не понимают новых стандартов вроде CSS3, HTML5 и т.п., в итоге мы видим не то, что ожидали. Так что утверждение
о том, что TWebBrowser использует движок той версии IE, которая установлена в системе – не более чем миф.
Решение заключается в эмуляции требуемой версии IE, для чего необходимо немного пошаманить в реестре. Шаманить можно либо на уровне всей
системы, работая с разделом HKEY_LOCAL_MACHINE (для этого потребуются права администратора) или на уровне пользователя, работая с разделом
HKEY_CURRENT_USER (права администратора не нужны). Кроме того, следует учитывать, совпадает ли разрядность приложения, для которого
устанавливается режим эмуляции, с разрядностью ОС. Посмотрим на примеры.
// Эмуляция на уровне системы, разрядность приложения и ОС совпадают:
HKLM\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION
// Эмуляция на уровне системы, разрядность приложения и ОС не совпадают (приложение x86 в ОС x64):
HKLM\Software\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION
// Эмуляция на уровне пользователя, разрядность приложения и ОС совпадают:
HKCU\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION
// Эмуляция на уровне пользователя, разрядность приложения и ОС не совпадают (приложение x86 в ОС x64):
HKCU\Software\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION
|
В выбранном(ых) разделе(ах) нужно создать параметр типа DWORD вида:
имя_файла.exe = версия эмулируемого браузера для него
|
К примеру, запись:
означает, что для myapp.exe будет эмулироваться IE11. Значения параметра можно посмотреть
здесь.
Значение |
Описание |
11001 (0x2AF9) |
Веб-страницы отображаются в режиме IE11, независимо от заявленного <!DOCTYPE>.
|
11000 (0x2AF8) |
Веб-страницы, содержащие стандартные директивы <!DOCTYPE>, отображаются в
режиме IE11 (является значением по умолчанию для IE11).
|
10001 (0x2711) |
Веб-страницы отображаются в режиме IE10, независимо от заявленного <!DOCTYPE>.
|
10000 (0x02710) |
Веб-страниц, содержащие стандартные директивы <!DOCTYPE>, отображаются в режиме
IE10 (является значением по умолчанию для IE10).
|
9999 (0x270F) |
Веб-страницы отображаются в режиме IE9, независимо от заявленного <!DOCTYPE>.
|
9000 (0x2328) |
Веб-страницы, содержащие стандартные директивы <!DOCTYPE>, отображаются в режиме IE9
(является значением по умолчанию для IE9).
Важно: в IE10 веб-страницы, содержащие стандартные директивы <!DOCTYPE>,
отображаются в режиме IE10.
|
8888 (0x22B8) |
Веб-страницы отображаются в режиме IE8, независимо от заявленного <!DOCTYPE>.
|
8000 (0x1F40) |
Веб-страницы, содержащие стандартные директивы <!DOCTYPE>, отображаются в режиме IE8
(яаляется значением по умолчанию для IE8).
Важно: в IE10 веб-страницы, содержащие стандартные директивы <!DOCTYPE>,
отображаются в режиме стандартов IE10.
|
7000 (0x1B58) |
Веб-страницы, содержащие стандартные директивы <!DOCTYPE>, отображаются в режиме IE7
(является значением по умолчанию для приложений, содержащих элемент управления WebBrowser).
|
Что еще следует иметь ввиду?
- Минимальная версия IE, для которого возможна эмуляция – IE 8. Потому на Windows XP/Server 2003
нужно ставить IE 8 (максимальная версия IE, которую можно поставить на более “древние” ОС – IE8);
- На Windows 7 и выше можно ставить IE 11. Чтобы использовать эмуляцию 11-го IE, он (IE11) должен
быть установлен в системе.
Поэтому перед установкой режима эмуляции следует определить версию ОС и установленного IE (на основании
этой информации можно понять, какие версии IE можно эмулировать).
Однако все вышеописанное не гарантирует отсутствие проблем при отображении контента в эмулируемой версии
IE. Так, могут иметь место проблемы, связанные с рисованием на канве непосредственно в браузере, будьте
к этому готовы.
На этом все, удачных эмуляций!
|
При использовании материала - ссылка на сайт обязательна
|
|