Как отключить представление совместимости для IE WebBrowserControl в приложении WinForms? - PullRequest
33 голосов
/ 16 июля 2011

В моем приложении WinForms, если я использую элемент управления WebBrowser, кажется, что он переведен в режим совместимости.Как я могу отключить это и заставить его вести себя так же, как автономный IE на моем компьютере при просмотре того же сайта?

  • Я не хочу вносить изменения в реестр.Я хочу, чтобы все содержалось в моем приложении.
  • Загружаемый веб-сайт не является моим, поэтому у меня нет возможности вносить в него изменения (если они не могут быть сделаны программно из моего приложения).

Ответы [ 4 ]

55 голосов
/ 16 июля 2011

Нет другого способа сделать это, кроме как настроить следующие параметры реестра:

HKLM\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION

или, если это 32-битное приложение в 64-битной Windows:

HKLM\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION`

Эти настройкине отображаются в элементе управления WebBrowser.

Для получения дополнительной информации см .:

Какой режим совместимости с IE использует элемент управления веб-браузера?

В случае, если ссылка умирает:

Вы создаете значение DWORD, соответствующее имени вашего исполняемого файла, и задаете для этого значения одно из:

7000: Страницы, содержащие основанные на стандартах директивы <!DOCTYPE>, отображаются в режиме IE7.
8000: Страницы, содержащие основанные на стандартах директивы <!DOCTYPE>, отображаются в режиме IE8
8888: Страницы всегда отображаются в режиме IE8, независимо отдиректива <!DOCTYPE>.(Это обходит исключения, перечисленные ранее.)
9000: использовать настройки IE9!
9999: принудительно использовать IE9

Например:

enter image description here

Из моих собственных экспериментов с IE9:

  • 9000 - наследует режим совместимости, установленный в настройке глобального режима совместимости IE9.например: enter image description here

  • 9999 - выводит IE9 из режима совместимости в хост-приложении независимо от глобально настроенного параметра режима совместимости

Вашприложению, вероятно, потребуется определить, какая базовая версия IE доступна, чтобы определить, какое значение использовать:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Version

или, если это 32-битное приложение на 64-битной Windows:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Version

Естьтакже эта старая статья о том, когда IE8 вышел, на которую стоит посмотреть:

Больше улучшений IE8

Вы также можете настроить эти параметры надля каждого пользователя:

HKCU\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION
26 голосов
/ 27 мая 2012

Хотя это не то, что вы просили, если вы являетесь владельцем сайта, вы можете добавить следующее в заголовок html:

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9" />

См: http://msdn.microsoft.com/en-us/library/cc288325(v=vs.85).aspx

5 голосов
/ 11 января 2014

Вот небольшая проблема: если пользователь включит режим совместимости в IE8, он переопределит все директивы страницы. Поэтому любая переменная страницы или сервера, которую вы пытаетесь использовать, не сможет помешать IE переключиться в представление совместимости, если пользователь включил эту функцию в IE. Большинство людей думают, что директивы страниц или какая-то секретная переменная сервера заголовков исправят сайт. Нету. Ни одно из этих решений не работает, если параметр был переопределен вручную. Я знаю, это просто не круто. Таким образом, следующее будет работать, только если пользователь не включил функцию просмотра совместимости.

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8" />

Чтобы уточнить шаги, чтобы изменить это в реестре, отредактируйте ключ:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION

Затем добавьте новый DWORD с именем iexplore.exe . Для этого щелкните правой кнопкой мыши и выберите «Создать»> «DWORD». Дайте этому DWORD десятичное значение 9999 . Это позволит сделать все сайты без совместимости. Чтобы включить режим совместимости, снова удалите этот DWORD. Также, если вы хотите автоматизировать это изменение и запустить пакетный скрипт в вашей системе, проверьте скрипт Михала М.

https://gist.github.com/michal-m/1853315

2 голосов
/ 10 июля 2013

Я знаю, что это старый вопрос, но есть способ вставить заголовок в элемент управления веб-браузера в Visual Basic 2010 и более поздних версиях, чтобы отключить представление совместимости:

Первое, что вам нужно сделатьперехватывает текущую веб-страницу и затем заменяет тег head следующим образом:

Sub compatible()
' --- simple routine to disable compatible view.

    Dim the_url As String
    Dim message As String
    Dim theReplacement As String
    Dim oldMessage As String

    the_url = WebBrowser1.Url.OriginalString

    WebBrowser1.Navigate(the_url)

    message = "<head>" + Chr(13) + Chr(10) + "<meta http-equiv=" + Chr(34) + "X-UA-Compatible" + Chr(34) + "content=" + Chr(34) + "IE=edge" + Chr(34) + " />" + Chr(13) + Chr(10) + "<base href=" + Chr(34) + the_url + Chr(34) + ">"

    oldMessage = WebBrowser1.DocumentText.ToString()

    theReplacement = Replace(oldMessage, "<head>", message)
    WebBrowser1.DocumentText = theReplacement

End Sub

Этот код добавляет две следующие строки в элемент управления веб-браузера:

<meta http-equiv="X-UA-Compatible"content="IE=edge" />
<base href="(url of the web page)">
...