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


84

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

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

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

Ответы:


82

«Версия» элемента управления WebBrowser для IE9, как и версия 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


8
С установленным IE 9 невозможно получить страницу для отображения в режиме IE 8. Установка значения 7000 переводит его в режим IE 7, а 8000/8888/9000/9999 переводит его в режим IE 9. Я не знаю, является ли это какой-то ошибкой или намеренно.
— Майкл Лоу

2
Мне пришлось добавить ключ как в current_user, так и в local_machine, прежде чем он начнет работать для меня. Но потом добился успеха.
— Сара Бейли

В этом сообщении в блоге weblog.west-wind.com/posts/2012/feb/15/… упоминается, что запись в реестре будет различаться в зависимости от того, 32-битная или 64-битная Windows. 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.
— Ричард Чемберс

129

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


2
Различные значения для части содержимого можно найти здесь: msdn.microsoft.com/en-us/library/ie/ms533876(v=vs.85).aspx
— KB

Если бы этот параметр можно было сохранить в файле CSS, я был бы счастливее. Теперь мне нужно просмотреть множество документов, или в Visual Studio есть функция многострочного поиска и замены?
— KB

2
Я попробовал использовать метатег, но ничего не вышло. Я получал сообщение об ошибке «HTML1115: X-UA-совместимый тег META ('IE = 9') проигнорирован, потому что режим документа уже завершен.», Что привело меня на веб-страницу evolpin.wordpress.com/2011/02/ 25 /… . Решением было убедиться, что метатег был первым элементом внутри блока <head>.
— Steg

21
Будьте осторожны, если вы запускаете 32-битные приложения (которые вызывают 32-битный MSIE) в 64-битной Windows, запись в реестре должна быть добавлена ​​в HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ Internet Explorer \ MAIN \ FeatureControl \ FEATURE_BROWSER_EMULATION вместо.
— igordc 08

1
Я рендерил html через xsl / xslt, и regedit по какой-то причине не работал ... Мета сделала свое дело. Благодаря!
— MazarD

25

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

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

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


17

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


16

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

Для 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

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

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

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

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

Я изменил его на десятичное 11001 или шестнадцатеричное 0x2AF9 --- (ЭМУЛЯЦИЯ IE 11), поскольку это не значение ПО УМОЛЧАНИЮ (если у вас установлен IE 11 - или любая другая версия).

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


1
Часть DWORD очень важна. QWORD не работает, и можно легко допустить ошибку.
— pvieira 01

Я бы добавил, что при отладке в VS вы должны также добавить запись для myappname.vshost.exe. С другой стороны, я подозреваю, что простой запуск приложения из отладчика, а затем в отладчике также поможет. Думаю, однажды у меня это сработало; но я не уверен на 100%.
— Папа Смурф

1
Из-за моей конфигурации IE11 мне нужно было открыть IE11 и добавить целевой URL-адрес на мои доверенные сайты. Без этого, даже если мой реестр был правильно настроен, скрипты страницы не запускались.
— Тони

15

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

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

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

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

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


Это не связано с проблемой - элемент управления WebBrowser загружается только в режиме IE7, если не переопределен параметром реестра для вашей конкретной программы.
— Christian

4
@Christian Ты уверен? Насколько я могу судить, если веб-страница содержится <meta http-equiv="X-UA-Compatible" content="IE=edge" >в заголовке, веб-браузер загрузится в последнем режиме IE. Почему за ответ Микеля было подано 90+ голосов? потому что его решение работает. Изменение реестра не требуется, если вы можете изменить веб-страницу.
— Тайлер Лонг

Я на 100% уверен, но думаю, это также зависит от местоположения сайта. Я загружал локальный контент, и единственный способ сдвинуть версию с места - через реестр. Поверьте, я бы выбросил реестр из-за всего, что работает, но все остальное не работало.
— Кристиан,

ie = edge работал у меня, не трогая реестр. благодаря!
— Исроэль М. Олевски

@Christian, это действительно связано с вопросом - решение работает хорошо.
— MarzSocks 01

6

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

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

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


3

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


2
Перечитайте мой ответ еще раз. Голос против был необоснованным. Я сказал, что если он попытается использовать функции IE9, а затем развернет его на машине без IE9, эти функции не будут работать. Ваш параметр реестра обратной совместимости не изменит этого факта.
— Джош

16
Ваше первое предложение заведомо ложное. Ваше второе предложение, по крайней мере, одновременно очевидно и лениво. Кстати, спасибо за ответный голос против. Очень зрелый.
— whitehawk

3
Элемент управления WebBrowser использует любую установленную версию IE; однако сценарий обнаружения может этого не осознавать. Попробуйте этот [site ( whatismybrowser.com/)ght[1]) . Я знаю, что другие сайты предоставили мне неверную информацию, но этот сайт правильно определил браузер как версию IE, которая была установлена ​​на моем компьютере. [1]: whatismybrowser.com
— cjbarth

3

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

1

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

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


1

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

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

-3

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

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

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

Теперь я решил, что это bcos, на моей машине 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.

Полная ссылка здесь


without IE 9 installed, the registry switch EATURE_BROWSER_EMULATION won't work AT ALL.- это не правильно. У меня установлен только IE8, и я могу отлично использовать переключатель, чтобы переводить веб-браузер в разные режимы рендеринга.
— GSerg

Я пробовал установить IE8, пытаясь получить режим IE10, не работает вообще! Просто попробовал еще раз, не сработало
— Gob00st 03
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.