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

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

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

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

Ответ 1

IE9 "версия" элемента управления WebBrowser, как и версия IE8, на самом деле представляет собой несколько браузеров в одном. В отличие от версии IE8, у вас есть немного больше контроля над режимом рендеринга внутри страницы, изменяя doctype. Конечно, чтобы изменить режим браузера, вы должны установить свой реестр, как более ранний ответ. Вот фрагмент файла 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

Ответ 2

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

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

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

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

HKLM > ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ > Microsoft > Internet Explorer > Главная > FeatureControl > FEATURE_BROWSER_EMULATION

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

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

Ответ 3

Слава Богу, я нашел это. Крайне важно следующее:

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

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

Ответ 4

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

Ответ 5

Просто чтобы быть полным...

Вы должны добавить запись в реестр:

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

Для 32-битной ОС

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

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

Для 64-битной ОС

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

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

Затем укажите значение DWORD в соответствии со следующей таблицей:

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

Я изменил на 11001 десятичный или 0x2AF9 hex --- (IE 11 EMULATION)

ПОЧЕМУ это не значение DEFAULT (если у вас установлен IE 11 или какая-либо версия), вместо IE 7 или 8 я никогда не узнаю...

Ответ 6

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

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

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

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

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

Ответ 7

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

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

Самая распространенная ошибка - полагать, что необходимо добавить "contoso.exe" КАК ЕСТЬ и думать, что все это работает!

Ответ 8

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

Ответ 9

Я пришел к этому решению, и это не сработало для меня! Поскольку я использовал 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]

Ответ 10

Мне понравился (С#) код в следующем, который устанавливает параметры реестра для вашего приложения. Не уверен, что он вырезает его после установки, хотя если необходимы разрешения. Для меня это решило проблему с тем, что WebSocket не был доступен внутри элемента управления WebBrowser в WPF.

С# веб-браузер Ajax-вызов

Ответ 11

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

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

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

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

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

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

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

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

Ответ 12

Относительно решения, принятого whitehawk. Я просто пытаюсь добавить немного опыта. Просто пытался добавить комментарии, но SO жалуется на это слишком долго.

В принципе, без установки IE 9 переключатель FEATURE_BROWSER_EMULATION не будет работать ВСЕ.

Например, мой собственный опыт сегодня я пытался получить .net webcontrol для работы с режимом IE10, потому что один html, который я пытаюсь выполнить, не будет работать с .netControl под VS2012 и даже не работать, когда я загружаю html to IE8 напрямую, но css не будет отображаться должным образом (даже после того, как я скажу разрешить заблокированное содержимое). Но я тестировал один и тот же html-код с IE10 на другом компьютере win 8. Вот почему я пытаюсь установить .net webControl в режим IE 10, но просто продолжает сбой...

Теперь я понял, что это машина bcos my win 7, на которой установлен IE8, поэтому независимо от того, какое значение я установил в переключатель FEATURE_BROWSER_EMULATION (значение IE9, IE10 IE11), он просто не будет работать AT ALL!

Затем я загрузил и установил IE 10 на свою машину win 7. Тем не менее это не сработает, затем я добавил FEATURE_BROWSER_EMULATION, он начал работать!

Также я заметил, что независимо от того, какое значение я установил, даже установил значение 0 по умолчанию, webControl все еще использует режим IE 10, который все еще работает для меня.

Итак, чтобы подвести итог, Если у вас установлен IE X, но вы хотите, чтобы ваш .Net webControl работал под IE (X + N) N > 0 modo, TWO things, вам нужно сделать:

  • Перейдите на веб-сайт MS и загрузите и установите IE (X + N) на свой компьютер, вам потребуется перезагрузка после установки.

  • примените ответ whitehawk.

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

HKEY_LOCAL_MACHINE (or HKEY_CURRENT_USER)
   SOFTWARE
      Microsoft
         Internet Explorer
            Main
               FeatureControl
                  FEATURE_BROWSER_EMULATION
                     contoso.exe = (DWORD) 00009000

Windows Internet Explorer 8 и более поздних версий. Функция FEATURE_BROWSER_EMULATION определяет режим эмуляции по умолчанию для Internet Explorer и поддерживает следующие значения.

Значение Описание

  • 11001 (0x2AF9 Internet Explorer 11. Веб-страницы отображаются в IE11 , независимо от директивы DOCTYPE.

    11000 (0x2AF8) IE11. Веб-страницы, содержащие стандарты! DOCTYPE директивы отображаются в режиме кеша IE11. Значение по умолчанию для IE11.

    10001 (0x2711) Internet Explorer 10. Веб-страницы отображаются в IE10 Режим стандартов, независимо от директивы! DOCTYPE.

    10000 (0x02710) Internet Explorer 10. Веб-страницы, содержащие на основе стандартов! Директивы DOCTYPE отображаются в стандартах IE10 Режим. Значение по умолчанию для Internet Explorer 10.

    9999 (0x270F) Windows Internet Explorer 9. Веб-страницы отображаются в IE9, независимо от директивы! DOCTYPE.

    9000 (0x2328) Internet Explorer 9. Веб-страницы, содержащие основанные на стандартах! Директивы DOCTYPE отображаются в режиме IE9. Значение по умолчанию для Internet Explorer 9.

    Важно В Internet Explorer 10 веб-страницы, содержащие на основе стандартов! Директивы DOCTYPE отображаются в стандартах IE10 Режим.

    8888 (0x22B8) Веб-страницы отображаются в режиме стандартов IE8, независимо от директивы! DOCTYPE.

    8000 (0x1F40) Веб-страницы, содержащие основанные на стандартах! Директивы DOCTYPE отображаются в режиме IE8. Значение по умолчанию для Internet Explorer 8 Важно В Internet Explorer 10 веб-страницы, содержащие на основе стандартов! Директивы DOCTYPE отображаются в стандартах IE10 Режим.

    7000 (0x1B58) Веб-страницы, содержащие основанные на стандартах! Директивы DOCTYPE отображаются в режиме стандартов IE7. Значение по умолчанию для приложений хостинг WebBrowser Control.

Полный ref здесь