2011-01-06 1 views
82

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

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

Моя забота: я хочу отобразить на ней какую-то графику SVG.

ответ

79

IE9 «версия» элемента управления WebBrowser, как и версия IE8, на самом деле представляет собой несколько браузеров в одном. В отличие от версии IE8, у вас есть немного больше контроля над режимом рендеринга внутри страницы, изменяя doctype. Конечно, чтобы изменить режим браузера, вы должны установить свой реестр, как более ранний ответ.Вот фрагмент рег файл для 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) -Webpages являются отображаются в режиме стандартов IE8, независимо от директивы DOCTYPE!.
  • 8000 (0x1F40) - Веб-страницы, содержащие основанные на стандартах! Директивы DOCTYPE отображаются в режиме IE8.
  • 7000 (0x1B58) - сетевые ресурсы, содержащие директивы DOCTYPE основанные на стандартах отображаются в режиме IE7 Standards.

Полные документы:

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. Является ли это какой-то ошибкой или намеренно ли я не знаю. – mikel

+1

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

+0

Мета-тег работал для меня. Спасибо! – ncastro

3

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

+2

Перечитайте мой ответ снова. Нисходящий приз был невостребован. Я сказал, что если он попытается использовать функции IE9, а затем развернется на машине без IE9, эти функции не будут работать. Ваш параметр реестра обратной совместимости не изменит этот факт. – Josh

+16

Ваше первое предложение явно ложно. Ваше второе предложение, по крайней мере, очевидно и лениво. BTW благодарит за возмездие вниз. Очень зрелый. – whitehawk

+2

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

122

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

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

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

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

HKLM> SOFTWARE> Microsoft> Internet Explorer> Главная> FeatureControl> FEATURE_BROWSER_EMULATION

И там добавить 'myApplicationName.exe' с значение «9000», чтобы заставить элемент управления WebBrowser отображать страницы в режиме IE9. Хотя есть other values you can use too, обратите внимание, что эти документы не совсем точны, так как не представляется возможным получить страницу для рендеринга в режиме IE 8 независимо от того, какое значение вы используете.

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

+7

Метатег работает как шарм. Спасибо огромное! – viggity

+2

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

+0

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

22

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

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

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

6

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

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

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

16

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

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.

C# webbrowser Ajax call

15

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

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

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

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

******* OR * ******

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 --- (IE 11 эмуляции)

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

+1

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

+0

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

-3

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

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

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

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

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

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

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

  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 Standards режиме .

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

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

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

Полный исх here

+0

'без установленного IE 9, переключатель реестра EATURE_BROWSER_EMULATION не будет работать AT ALL.' - это неправильно. У меня установлен только IE8, и я могу использовать этот переключатель, чтобы помещать webbrowser в разные режимы рендеринга. – GSerg

+0

Я попытался установить IE8, пытаясь получить режим IE10, не будет работать вообще! Просто попробовал еще раз, не работал – Gob00st

1

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

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

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

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

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

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

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

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

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

Только в случае, если вы не знаете, это:

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

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

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

+0

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

+3

@ Христиан Ты уверен? Насколько я могу судить, если веб-страница содержит '' в заголовке, webBrowser будет загружаться в последнем режиме IE. Почему существует 90 + upvotes для mikel's anwer? потому что его решение работает. Изменение реестра не требуется, если вы можете изменить веб-страницу. –

+0

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