Как отключить представление совместимости в IE WebBrowserControl в приложении WinForms?
В моем приложении WinForms, если я использую элемент управления WebBrowser, он, похоже, принудительно переходит в режим совместимости. Как я могу отключить это и заставить его вести себя так же, как автономный IE на моей машине при просмотре одного и того же сайта?
- Я не хочу вносить изменения в реестр. Я хочу, чтобы все содержалось в моем приложении.
- Веб-сайт, который я загружаю, не мой, поэтому у меня нет возможности вносить в него изменения (если они не могут быть реализованы программно из моего приложения).
Ответы
Ответ 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)">