Настройка режима эмуляции элемента управления Internet Explorer WebBrowser

  1. О версиях эмуляции браузера
  2. Настройка версии эмуляции браузера
  3. Получение версии Internet Explorer
  4. Обратите внимание:
  5. Получение версии эмуляции браузера
  6. Установка версии эмуляции
  7. Простое использование
  8. Предостережения и замечания
  9. Дальнейшее чтение

Иногда мне нужно встраивать HTML в мои приложения. Если это просто для отображения простого макета с основными взаимодействиями, я мог бы использовать такой компонент, как HtmlRenderer , В большинстве случаев, однако, мне нужен более сложный макет, JavaScript или я мог бы хотеть отображать реальные страницы из Интернета - в этом случае я теряюсь с элементом управления WebBrowser.

Я знаю, что существуют другие встраиваемые браузеры, но идея доставки дополнительных зависимостей размером в несколько МБ не имеет смысла, если в приложении интенсивно не используются интерфейсы HTML.

Элемент управления WebBrowser раздражает меня множеством способов, но он выполняет свою работу. Иногда меня расстраивает то, что по умолчанию это встроенная версия Internet Explorer 7 - или включение режима совместимости в современном сеансе IE. Не так хорошо, как все больше и больше сайтов используют HTML5 и другие вкусности.

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

О версиях эмуляции браузера

Таблица ниже ( источник ) перечисляет текущие поддерживаемые версии эмуляции на момент написания. Как видите, можно эмулировать все «последние» версии Internet Explorer одним из двух способов - либо путем принудительного использования стандартного режима, либо с помощью директив! DOCTYPE для управления этим режимом. Исключением из этого двойственного поведения является версия 7, которая как есть.

Согласно документации, режимы IE8 (8000) и IE9 (9000) переключатся в режим IE10 (10000), если он установлен. В документации не упоминается, относится ли это к IE11, поэтому я не уверен в поведении в этом отношении.

Значение Описание 11001 Internet Explorer 11. Веб-страницы отображаются в граничном режиме IE11 независимо от директивы! DOCTYPE. 11000 IE11. Веб-страницы, содержащие основанные на стандартах директивы! DOCTYPE, отображаются в граничном режиме IE11. Значение по умолчанию для IE11. 10001 Internet Explorer 10. Веб-страницы отображаются в режиме стандартов IE10 независимо от директивы! DOCTYPE. 10000 Internet Explorer 10. Веб-страницы, содержащие основанные на стандартах директивы! DOCTYPE, отображаются в режиме стандартов IE10. Значение по умолчанию для Internet Explorer 10. 9999 Windows Internet Explorer 9. Веб-страницы отображаются в режиме стандартов IE9 независимо от директивы! DOCTYPE. 9000 Internet Explorer 9. Веб-страницы, содержащие основанные на стандартах директивы! DOCTYPE, отображаются в режиме IE9. Значение по умолчанию для Internet Explorer 9. 8888 Веб-страницы отображаются в режиме стандартов IE8 независимо от директивы! DOCTYPE. 8000 веб-страниц, содержащих основанные на стандартах директивы! DOCTYPE, отображаются в режиме IE8. Значение по умолчанию для Internet Explorer 8 7000 Веб-страницы, содержащие основанные на стандартах директивы! DOCTYPE, отображаются в режиме стандартов IE7. Значение по умолчанию для приложений, в которых размещен элемент управления WebBrowser.

Настройка версии эмуляции браузера

Настройка версии эмуляции браузера

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

HKEY_LOCAL_MACHINE (или HKEY_CURRENT_USER)ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕMicrosoftInternet ExplorerОсновнаяфункцияFeatureControlFEATURE_BROWSER_EMULATIONyourapp.exe

= (DWORD) версия

Примечание. Если вы делаете это из приложения, отлаживаемого с помощью Visual Studio, и включена опция «Процесс хостинга Visual Studio», вы обнаружите, что имя исполняемого файла может не соответствовать ожидаемому. Если этот параметр включен, вместо него используется заглушка со слегка измененным именем. Например, если ваше приложение называется calc.exe, вам нужно добавить значение calc.vshost.exe, чтобы установить эмулированную версию для правильного процесса.

Получение версии Internet Explorer

Поскольку более разумно определить версию IE, установленную на компьютере пользователя, и установить соответствующую версию эмуляции, сначала нам потребуется способ определения версии IE.

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

HKEY_LOCAL_MACHINEПРОГРАММНОЕ ОБЕСПЕЧЕНИЕMicrosoftInternet ExplorersvcVersion

или версия

В более ранних версиях IE использовалось значение Version, а в более новых версиях используется svcVersion. В любом случае это значение содержит строку версии.

Мы можем использовать следующую версию, чтобы вытащить главную цифру.

приватная константная строка InternetExplorerRootKey = @ "Программное обеспечение \ Microsoft \ Internet Explorer"; public static int GetInternetExplorerMajorVersion () {int result; результат = 0; попробуй {RegistryKey ключ; ключ = Registry.LocalMachine.OpenSubKey (InternetExplorerRootKey); if (key! = null) {значение объекта; value = key.GetValue ("svcVersion", null) ?? key.GetValue ("Версия", ноль); if (value! = null) {строковая версия; разделитель int; version = value.ToString (); separator = version.IndexOf ('.'); if (separator! = -1) {int.TryParse (version.Substring (0, separator), out out); }}}} catch (SecurityException) {// У пользователя нет прав, необходимых для чтения из раздела реестра. } catch (UnauthorizedAccessException) {// У пользователя нет необходимых прав в реестре. } вернуть результат; }

Обратите внимание:

  • Я возвращаю int с основным компонентом версии, а не классом Version. В этом примере мне не нужна полная версия для начала, и это позволяет избежать сбоев, если строка версии неверна
  • По той же причине я явно ловлю (и игнорирую) исключения исключений SecurityException и UnauthorizedAccessException, которые будут выброшены, если у пользователя нет разрешения на доступ к этим ключам. Опять же, я не хочу, чтобы функция зависала по этим причинам.

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

Получение версии эмуляции браузера

Получение версии эмуляции браузера

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

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

public enum BrowserEmulationVersion {По умолчанию = 0, Версия 7 = 7000, Версия 8 = 8000, Версия 8 Стандарты = 8888, Версия 9 = 9000, Версия 9 Стандарты = 9999, Версия 10 = 10000, Версия 10 Стандарты = 10001, Версия 11 = 11000, Версия 11Edge = 11001}

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

приватная константная строка BrowserEmulationKey = InternetExplorerRootKey + @ "\ Main \ FeatureControl \ FEATURE_BROWSER_EMULATION"; public static BrowserEmulationVersion GetBrowserEmulationVersion () {BrowserEmulationVersion result; result = BrowserEmulationVersion.Default; попробуй {RegistryKey ключ; key = Registry.CurrentUser.OpenSubKey (BrowserEmulationKey, true); if (key! = null) {string programName; стоимость объекта; programName = Path.GetFileName (Environment.GetCommandLineArgs () [0]); value = key.GetValue (programName, null); if (value! = null) {result = (BrowserEmulationVersion) Convert.ToInt32 (value); }}} catch (SecurityException) {// У пользователя нет прав, необходимых для чтения из раздела реестра. } catch (UnauthorizedAccessException) {// У пользователя нет необходимых прав в реестре. } вернуть результат; } public static bool IsBrowserEmulationSet () {return GetBrowserEmulationVersion ()! = BrowserEmulationVersion.Default; }

Установка версии эмуляции

И, наконец, нам нужно установить версию эмуляции. Для этого я предоставил две функции: одна позволяет явно задавать значение, а другая использует наиболее подходящее значение для установленной версии Internet Explorer.

public static bool SetBrowserEmulationVersion (BrowserEmulationVersion browserEmulationVersion) {bool result; результат = ложь; попробуй {RegistryKey ключ; key = Registry.CurrentUser.OpenSubKey (BrowserEmulationKey, true); if (key! = null) {string programName; programName = Path.GetFileName (Environment.GetCommandLineArgs () [0]); if (browserEmulationVersion! = BrowserEmulationVersion.Default) {// если это допустимое значение, обновите или создайте значение key.SetValue (programName, (int) browserEmulationVersion, RegistryValueKind.DWord); } else {// в противном случае удалите существующее значение key.DeleteValue (programName, false); } result = true; }} catch (SecurityException) {// У пользователя нет прав, необходимых для чтения из раздела реестра. } catch (UnauthorizedAccessException) {// У пользователя нет необходимых прав в реестре. } вернуть результат; } public static bool SetBrowserEmulationVersion () {int ieVersion; BrowserEmulationVersion emulationCode; ieVersion = GetInternetExplorerMajorVersion (); if (ieVersion> = 11) {emulationCode = BrowserEmulationVersion.Version11; } else {switch (ieVersion) {case 10: emulationCode = BrowserEmulationVersion.Version10; перерыв; case 9: emulationCode = BrowserEmulationVersion.Version9; перерыв; case 8: emulationCode = BrowserEmulationVersion.Version8; перерыв; по умолчанию: emulationCode = BrowserEmulationVersion.Version7; перерыв; }} return SetBrowserEmulationVersion (emulationCode); }

Как упоминалось ранее, я не хочу, чтобы эти функции зависали по ожидаемым причинам, поэтому эти функции также будут перехватывать и игнорировать исключения SecurityException и UnauthorizedAccessException. Функция SetBrowserEmulationVersion вернет true, если значение было обновлено.

Простое использование

Если вы просто хотите обновить версию эмуляции браузера «запусти и забудь», вы можете использовать следующие строки.

if (! InternetExplorerBrowserEmulation.IsBrowserEmulationSet ()) {InternetExplorerBrowserEmulation.SetBrowserEmulationVersion (); }

Это будет применять наиболее подходящую версию IE, если не установлена ​​версия эмуляции. Однако это означает, что если пользователь обновит свою копию, если в IE что-то более новое, ваше приложение потенциально продолжит использовать более старую версию. Я оставлю это как упражнение на другой день!

Предостережения и замечания

Экспериментируя с этим кодом, я столкнулся с серьезной оговоркой.

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

Однако установка версии эмуляции не работает, если в вашем приложении уже создан экземпляр элемента управления WebBrowser. Я пробовал разные вещи, такие как воссоздание элемента управления WebBrowser или перезагрузка формы, на которой был размещен элемент управления, но не смог заставить новый экземпляр выполнить настройку без перезапуска приложения.

Прилагаемая демонстрационная программа сопровождается хаком «перезагрузка после выбора» - не делайте этого в рабочих приложениях!

Вы должны тщательно продумать, где или нет менять версию эмуляции вашего приложения. Если в настоящее время он работает нормально, то, вероятно, лучше оставить все как есть. Однако, если вы хотите использовать современные стандарты, соответствующие HTML, CSS или JavaScript, то установка соответствующей версии эмуляции избавит вас от многих проблем.

Дальнейшее чтение

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

Индекс всех доступных опций конфигурации можно найти на MSDN ,

Похожие

Microsoft прекращает поддержку старых версий Internet Explorer
Компания Microsoft выполнила свое обещание прекратить поддержку более старых версий Internet Explorer. С сегодняшнего дня (12 января 2016 г.) Microsoft прекратит поддержку и обновления безопасности для нескольких версий Internet Explorer, работающих на различных версиях Windows. С большим хныканьем, чем удар, Microsoft выполнила свое обещание в августе 2014 года прекратить поддержку
Использование мобильного устройства для управления игрой в браузере с помощью веб-разработки
Поддержка акселерометра доступна в Mobile Safari и на всех новых устройствах Android. Это позволяет браузеру ощущать движение, скорость и направление с помощью Javascript на мобильных и планшетных устройствах. Если мы немедленно передадим данные о перемещении с мобильного устройства через сервер nodejs в браузер, тогда мы сможем управлять игрой в браузере. Это именно то, что мы собрали в этом веселая маленькая демонстрация html5 ,
Как восстановить поврежденный файл личных папок Outlook (pst)
Microsoft предоставляет Scanpst, также известный как Inbox Repair Tool, для устранения большинства проблем с поврежденными PST-файлами личных папок. Прежде чем вы сможете использовать scanpst, вам
Как синхронизировать закладки вашего браузера
... браузерах. Посмотрите, может ли EverSync, расширение и приложение для браузера, подойдет вам. Изображение: Ундрей, Getty Images / iStockphoto Если вы являетесь ИТ-администратором, веб-разработчиком или другим профессионалом, вам, скорее всего,
Центр управления сетью / Estrack / Операции / Наша деятельность / ESA
Центр управления сетью В ESOC, Европейском центре космических операций, Дармштадт, Германия, Центр сетевых операций наблюдает за глобальной сетью наземных станций ЕКА, используя сложную систему дистанционного управления и автоматизации для сокращения расходов на персонал и повышения эффективности. Команда операторов станций находится в смене 365 дней в году, обеспечивая получение важных данных с космических аппаратов, эксплуатируемых ЕКА и многочисленными агентствами-партнерами.
Наберите + 1-888-619-0842 Исправьте ошибку Касперского 27300: Установка драйвера klim6.sys
Что касается профессиональных экспертов по поддержке антивируса Касперского , то существуют тысячи ошибок Windows, которые могут быть вызваны различными причинами. Kaspersky Error 27300 - одна из них, с которой сталкиваются при установке драйвера klim6.sys_x64 или klim6.sys_x86 . Проблема, в которой Microsoft Silver-light не удается выполнить, является распространенной проблемой Windows, которая возникает часто и обычно сопровождается
Рендеринг HTML5 в старых браузерах с помощью Google Chrome Frame
... Explorer, который позволяет отображать весь холст браузера с помощью движка рендеринга Google Chrome. Он поддерживает все функции HTML5, которые вы найдете в Chrome, без проблем интегрированные в пользовательский интерфейс Internet Explorer. Chrome Frame доступен для Internet Explorer 6, 7, 8 и 9. Chrome Frame, безусловно, более полезен при поддержке старого браузера, такого как IE6-to-IE8, но если вам, например, требуется WebGL для вашего приложения, требующий Chrome Frame для Пользователи
Монитор TFT / ЖК-монитор Советы при покупке - обратите внимание
Поворотный ЖК-монитор (Фото: Samsung / T-Online) TF T-мониторы не только стильные и стильные, они также не искажают изображения, имеют низкое излучение
Как сбросить и изменить пароль администратора в Mac OS X
Вы потеряли пароль администратора Mac OS X? Не отчаивайся; Вы не первый человек в этой сложной ситуации. На самом деле, люди постоянно теряют пароли - как для администраторов, так и для обычных учетных записей. К счастью, существует множество способов сброса пароля администратора на Mac, и вам не нужно быть компьютерным экспертом, чтобы использовать любой из них. Прежде чем мы научим вас, как вы можете сбросить пароль Mac, если вы не помните оригинальный пароль, давайте рассмотрим,
Лучшие Android VPN для 2019
Что такое VPN? Использование телефона или планшета Android в общедоступной сети Wi-Fi может быть опасным по нескольким причинам. Например, неправильно настроенная сеть может раскрыть ваши данные другим. Существует также вероятность того, что гнусные вечеринки настроили невинную внешнюю беспроводную сеть специально для того, чтобы обмануть вас в подключении. Мошеннические сети может быть очень трудно отличить от реальной вещи, поэтому вы должны использовать
Часто задаваемые вопросы по Opera для Android
Где я могу найти основные функции браузера в Opera для Android? Расположение функций и настроек Opera немного различается в зависимости от выбранного типа раскладки: телефона или планшета. Чтобы получить доступ к функциям и настройкам Opera, нажмите Кнопка меню Opera
GetValue ("svcVersion", null) ?