Будет ли 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].

jtk
источник
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.

user3175394
источник
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.

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

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