«Версия» элемента управления 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
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
.Элемент управления WebBrowser будет использовать любую установленную вами версию IE, но по соображениям совместимости он по умолчанию будет отображать страницы в режиме стандартов IE7.
Если вы хотите воспользоваться преимуществами новых функций IE9, вам следует добавить метатег
<meta http-equiv="X-UA-Compatible" content="IE=9" >
внутри<head>
тега вашей HTML-страницы.Этот метатег должен быть добавлен перед любыми ссылками на файлы CSS, JavaScript и т. Д., Которые также находятся у вас,
<head>
чтобы работать правильно (только другие<meta>
теги или<title>
тег могут быть перед ним).Альтернативой является добавление записи реестра в:
И туда добавьте 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].
источник
Просто чтобы быть полным ...
Для 32-битной ОС вы должны добавить запись в реестр:
*******ИЛИ ЖЕ*******
Для 64-битной ОС вы должны добавить запись в реестр:
Эта запись должна быть 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.
источник
Я знаю, что эта ветка старая и уже есть исчерпывающие ответы.
На всякий случай, если вы этого не знаете:
<meta http-equiv="X-UA-Compatible" content="IE=edge" >
Вам не нужно жестко указывать номер версии IE как
<meta http-equiv="X-UA-Compatible" content="IE=9" >
источник
<meta http-equiv="X-UA-Compatible" content="IE=edge" >
в заголовке, веб-браузер загрузится в последнем режиме IE. Почему за ответ Микеля было подано 90+ голосов? потому что его решение работает. Изменение реестра не требуется, если вы можете изменить веб-страницу.Я полностью согласен с предложенным решением, но я думаю, что небольшое уточнение важно, я думаю, может быть необходимо.
Для каждого процесса (читайте также: vshost.exe, yourWinformApplication.exe.svchost или имя вашего application.exe), которому нужно будет добавить DWORD с указанным значением, в моем случае я оставляю 9000 (в десятичном формате) в приложении имя и скрипт работает плавно и без ошибок.
самая распространенная ошибка - это полагать, что необходимо добавлять "contoso.exe" КАК ЕСТЬ, и думать, что все это работает!
источник
Да, элемент управления WebBrowser использует любую установленную вами версию IE. Это, конечно, означает, что если вы запустите свое приложение на машине с IE 8, то функции IE 9, от которых вы зависите, будут недоступны.
источник
Я пришел к этому решению, и оно у меня не сработало! Поскольку я использовал 64-битную версию, мне пришлось заменить реестр:
Вместо того, о котором все говорят:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION]
источник
Мне понравился следующий код (C #), который устанавливает параметры реестра для вашего приложения. Не уверен, вырежет ли он его после установки, хотя требуются ли разрешения. Для меня это решило проблему с недоступностью WebSocket внутри элемента управления WebBrowser в WPF.
Вызов Ajax веб-браузера C #
источник
У меня была такая же проблема, и ответы реестра здесь не работали.
У меня был контроль браузера в новой версии моей программы, которая отлично работала на 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)"
/headers
отобразит настройку DEP для exe.источник
Относительно принятого ответа Уайтхока. Я просто пытаюсь добавить немного опыта. Просто пытался добавить комментарии, но ТАК жалуется, что это слишком долго.
По сути, без установленного 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, вам нужно сделать ДВА вещи :
Перейдите на веб-сайт MS, загрузите и установите IE (X + N) на свой компьютер, после установки потребуется перезагрузка.
применить ответ Уайтхока.
В основном: чтобы контролировать значение этой функции с помощью реестра, добавьте имя исполняемого файла в следующий параметр и установите значение, соответствующее желаемому параметру.
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, и я могу отлично использовать переключатель, чтобы переводить веб-браузер в разные режимы рендеринга.