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

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

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

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

12 ответов

Решение

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

Элемент управления 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 - нет.

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

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

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

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

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

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

HKEY_LOCAL_MACHINE \ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \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

Я изменил на 11001 десятичное или 0x2AF9 шестнадцатеричное --- (IE 11 EMULATION)

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

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

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

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

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

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

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

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

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

Да, элемент управления WebBrowser использует любую версию IE, которую вы установили. Это, конечно, означает, что если вы запустите свое приложение на компьютере с IE 8, то функции IE 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]

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

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

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

У меня был контроль браузера в новой версии моей программы, которая отлично работала в 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)"

Относительно принятого ответа Уайтхока. Я просто пытаюсь добавить немного опыта. Просто пытался добавить комментарии, но ТАК жалуется, что это слишком долго.

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

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

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

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

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

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

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

  2. применить ответ Уайтхока.

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

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.

Полный реф здесь

Другие вопросы по тегам