Подтвердить что ты не робот

Как отключить представление совместимости в IE WebBrowserControl в приложении WinForms?

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

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

Ответ 1

Невозможно сделать это, кроме настройки следующих параметров реестра:

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 используется элемент управления webbrowser?

Если связь замирает:

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

7000: страницы, содержащие основанные на стандартах директивы <!DOCTYPE>, отображаются в режиме IE7.
8000: страницы, содержащие основанные на стандартах директивы <!DOCTYPE>, отображаются в режиме IE8

8888: Страницы всегда отображаются в режиме IE8, независимо от директивы <!DOCTYPE>. (Это обходит исключения, перечисленные ранее.)
9000: используйте настройки IE9!
9999: Force 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

Ответ 2

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

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

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

Ответ 3

Вот тощий вопрос: если пользователь разрешает представление совместимости в 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. Также, если вы хотите автоматизировать это изменение и запустить пакет script в своей системе, ознакомьтесь с Michal M script.

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

Ответ 4

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

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

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

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

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