Будет ли IE9 WebBrowser Control поддерживать все функции IE9, включая SVG? - PullRequest
82 голосов
/ 06 января 2011

Я недавно обновился до IE9-бета.Теперь в моем приложении .Net (3.5) WinForm я хочу использовать WebBrowser control.

Итак, мой вопрос: будет ли элемент управления WebBrowser отображать все свойства и функции IE9?

Меня беспокоит то, что я хочу визуализировать SVG-графику на нем.

Ответы [ 12 ]

125 голосов
/ 06 января 2011

Элемент управления WebBrowser будет использовать любую версию IE, которую вы установили, но по соображениям совместимости он будет отображать страницы в режиме стандартов IE7 по умолчанию.

Если вы хотите воспользоваться новыми функциями IE9, вам следует добавить метатег <meta http-equiv="X-UA-Compatible" content="IE=9" > внутри тега <head> вашей HTML-страницы.

Этот метатег необходимо добавить перед любыми ссылками на CSS, файлы JavaScript и т. Д., Которые также есть в вашем <head>, чтобы работать должным образом (перед ним могут стоять только другие теги <meta> или тег <title>).

Альтернативой является добавление записи реестра в:

HKLM> ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ> Microsoft> Internet Explorer> Main> FeatureControl> FEATURE_BROWSER_EMULATION

И вдобавьте myApplicationName.exe со значением 9000, чтобы заставить элемент управления WebBrowser отображать страницы в режиме IE9.Хотя есть другие значения, которые вы тоже можете использовать , обратите внимание, что эти документы не совсем точны, так как не представляется возможным заставить страницу отображать в режиме IE 8 любое значение, которое вы используете.

Добавление ключа реестра к тому же пути в HKCU вместо HKLM также будет работать - это полезно, поскольку запись в HKLM требует привилегий администратора, в отличие от HKCU.

81 голосов
/ 18 марта 2011

IE9-версия элемента управления WebBrowser, как и версия IE8, на самом деле представляет собой несколько браузеров в одном. В отличие от версии IE8, у вас есть немного больший контроль над режимом рендеринга на странице путем изменения типа документа. Конечно, чтобы изменить режим браузера, вы должны настроить свой реестр, как предыдущий ответ. Вот фрагмент файла reg для FEATURE_BROWSER_EMULATION:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION]
"contoso.exe"=dword:00002328

Вот полный набор кодов:

  • 9999 (0x270F) - Internet Explorer 9. Веб-страницы отображаются в IE9 Режим стандартов, независимо от Директива! DOCTYPE.
  • 9000 (0x2328) - Internet Explorer 9. Веб-страницы, содержащие стандарты! DOCTYPE директивы отображаются в режиме IE9.
  • 8888 (0x22B8) - веб-страницы отображается в режиме стандартов IE8, независимо от директивы! DOCTYPE.
  • 8000 (0x1F40) - веб-страницы, содержащие основанные на стандартах директивы DOCTYPE отображаются в режиме IE8.
  • 7000 (0x1B58) - веб-страницы, содержащие основанные на стандартах директивы DOCTYPE отображаются в режиме стандартов IE7.

Полная документация:

http://msdn.microsoft.com/en-us/library/ee330730%28VS.85%29.aspx#browser_emulation

24 голосов
/ 15 марта 2011

Слава богу, я нашел это. Следующее чрезвычайно важно:

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

Без этого ни один из отчетов, которые я генерировал, не работал бы после установки IE9, несмотря на то, что он отлично работал в IE8. Они будут правильно отображаться в элементе управления веб-браузера, но при вызове .Print () будут отсутствовать буквы, запутанные пробелы и т.д. Они были просто базовым HTML, который должен быть отображен даже в Mosaic. хех Не уверен, почему в режиме совместимости IE7 шло провал. Примечательно, что вы можете .Print () одну и ту же страницу 5 раз и каждый раз пропускать разные буквы. Это даже перенесет в вывод PDF, так что это определенно браузер.

17 голосов
/ 15 сентября 2012

Примечание о 64-битной Windows, которая, кажется, сбивает с толку несколько человек.Если ваше приложение работает под 64-битной ОС Windows, вам, скорее всего, придется установить DWORD в [HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ Internet Explorer \ Main \ FeatureControl \ FEATURE_BROWSER_EMULATION].

16 голосов
/ 09 января 2014

Просто чтобы завершить ...

Для 32-битных ОС вы должны добавить запись реестра в:

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

******* ИЛИ *******

Для 64-битной ОС вы должны добавить запись реестра в:

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

Эта запись должна быть DWORD, где имя является именем вашего исполняемого файла, который размещаетэлемент управления веб-браузера;например:

myappname.exe (НЕ ИСПОЛЬЗУЙТЕ «Contoso.exe», как на веб-странице MSDN ... это просто имя-заполнитель)

Затем присвойте ему значение DWORDв соответствии с таблицей:

http://msdn.microsoft.com/en-us/library/ee330730(v=vs.85).aspx#browser_emulation

Я изменил на 11001 десятичное или 0x2AF9 шестнадцатеричное --- (IE 11 EMULATION), так как это не значение DEFAULT (если у вас естьIE 11 установлен - или любой другой версии).

Эта статья MSDN содержит заметки о некоторых других изменениях реестра, которые влияют на поведение браузера Internet Explorer.

14 голосов
/ 23 января 2015

Я знаю, что эта тема старая и уже есть исчерпывающие ответы.

На всякий случай, если вы не знаете этого:

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

Вы ненужно жестко закодировать номер версии IE как

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

6 голосов
/ 12 июля 2012

Я полностью согласен с предоставленным решением, но я думаю, что небольшое разъяснение важно, я думаю, может быть необходимо.

Для каждого процесса (см. Также: vshost.exe, yourWinformApplication.exe.svchost или имя вашего application.exe), для которого потребуется добавить DWORD с указанным значением, в моем случае я оставляю 9000 (в десятичном формате ) в имени приложения и работает безошибочно и безошибочно.

самая распространенная ошибка - полагать, что необходимо добавить «contoso.exe» как есть, и думать, что все работает!

3 голосов
/ 07 декабря 2013

Я пришел к этому решению, и оно у меня не сработало!Поскольку я использовал 64-битную версию, мне пришлось заменить реестр:

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

Вместо того, о котором все говорят:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION]
3 голосов
/ 06 января 2011

Да, элемент управления WebBrowser использует любую версию IE, которую вы установили.Это, конечно, означает, что если вы запустите свое приложение на компьютере с IE 8, то функции IE 9, от которых вы зависите, не будут доступны.

1 голос
/ 21 октября 2014

У меня была та же проблема, и ответы реестра здесь не работали.

У меня был элемент управления браузером в новой версии моей программы, которая отлично работала в XP, не работала в Windows 7 (64-разрядная версия),Старая версия работала как на XP, так и на Windows 7.

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

Оказывается,проблема связана с защитой DEP в Windows 7.

Старые версии dotnet 2 не устанавливали флаг требуемого DEP в exe, но начиная с dotnet 2, SP 1 и далее (да, поведение компиляции иследовательно, поведение exe во время выполнения меняется в зависимости от того, на какой машине вы скомпилировали, хорошо ...).

Это задокументировано в блоге MSDN NXCOMPAT и компиляторе C # .Цитата: Это, несомненно, удивит некоторых разработчиков ... скачайте пакет сервисов фреймворка, перекомпилируйте, запустите ваше приложение, и теперь вы получаете исключения IP_ON_HEAP.

Добавление следующего кпост-сборка в Visual Studio отключает DEP для exe, и все работает как положено:

all "$(DevEnvDir)..\tools\vsvars32.bat"
editbin.exe /NXCOMPAT:NO "$(TargetPath)"
...