Чи підтримуватиме IE9 WebBrowser Control усі функції IE9, включаючи SVG?


84

Нещодавно я перейшов на IE9-beta. Тепер у своїй програмі .NET (3.5) WinForm я хочу використовувати WebBrowserуправління.

Отже, моє питання полягає в тому, чи WebBrowserбуде елемент керування демонструвати всі властивості та функції IE9?

Мене турбує те, що я хочу надати на ньому трохи графіки SVG.

Відповіді:


82

"Версія" 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 Standards, незалежно від директиви! DOCTYPE.
  • 9000 (0x2328) - Internet Explorer 9. Веб-сторінки, що містять директиви на основі стандартів! DOCTYPE відображаються в режимі IE9.
  • 8888 (0x22B8) -Веб-сторінки відображаються в режимі IE8 Standards, незалежно від директиви! 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

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 Standards.

Якщо ви хочете скористатися новими можливостями IE9, вам слід додати мета-тег <meta http-equiv="X-UA-Compatible" content="IE=9" >всередину <head>тегу вашої HTML-сторінки.

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

Альтернативою є додавання запису реєстру до:

HKLM> ПРОГРАМНЕ ЗАБЕЗПЕЧЕННЯ> Microsoft> Internet Explorer> Головна> 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: Тег META-сумісний з X-UA ('IE = 9') ігнорується, оскільки режим документа вже доопрацьований.", Що призводить мене до веб-сторінки evolpin.wordpress.com/2011/02/ 25 /… . Потім рішення було забезпечити, щоб метатег був першим елементом всередині блоку <head>.
Стег

21
Будьте обережні, якщо ви використовуєте 32-розрядні програми (які викликають 32-розрядну MSIE) у 64-розрядної Windows, запис реєстру слід додати до HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ Internet Explorer \ MAIN \ FeatureControl \ FEATURE_BROWSER_EMULATION замість цього.
igordc

1
Я робив html через xsl / xslt, і regedit чомусь не спрацював ... Мета зробила трюк. Дякую!
MazarD

25

Слава богу, я знайшов це. Наступне надзвичайно важливо:

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

Без цього жоден звіт, який я створював, не працював би після встановлення IE9, незважаючи на те, що він чудово працював в IE8. Вони відображатимуться належним чином в елементі керування веб-браузера, але, коли я зателефонував .Print (), не було б пропущених букв, пробілів тощо. Вони були лише базовим HTML-кодом, який повинен бути здатний відображатись навіть у мозаїці. хех Не впевнений, чому режим сумісності 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 EMULATION), оскільки це не значення DEFAULT (якщо у вас встановлений IE 11 - або будь-яка інша версія).

Ця стаття MSDN містить примітки щодо кількох інших змін реєстру, які впливають на поведінку веб-браузера Internet Explorer.


1
Частина DWORD дуже важлива. QWORD не буде працювати, і можна легко зробити цю помилку.
пвейра

Я хотів би додати, що під час налагодження під VS слід також додати запис для myappname.vshost.exe. З іншого боку, я підозрюю, що просто запуск програми з налагоджувача, а потім у налагоджувачі також зробив би свою справу. Думаю, це колись у мене спрацювало; але я не впевнений на 100%.
Papa Smurf

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, якщо не замінено налаштуваннями реєстру для вашої конкретної програми.
Крістіан

4
@Christian Ви впевнені? Наскільки я можу зрозуміти, якщо веб-сторінка містить <meta http-equiv="X-UA-Compatible" content="IE=edge" >заголовок, веб-браузер завантажиться в останньому режимі IE. Чому існує 90+ голосів проти анкети Мікеля? тому що його рішення працює. Зміна реєстру не потрібна, якщо ви можете змінити веб-сторінку.
Тайлер Лонг,

Я на 100% впевнений, проте, думаю, це також залежить від місця розташування веб-сайту. Я завантажував локальний вміст, і єдиний спосіб, коли версія буде рухатися, - це через реєстр. Повірте мені, я б викинув рішення реєстру на все інше, що працює, але, здавалося б, нічого іншого не спрацювало.
Крістіан

тобто = edge працював у мене, не торкаючись реєстру. Дякую!
Yisroel M. Olewski

@Christian, це справді пов'язано з питанням - рішення працює добре.
MarzSocks

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; однак сценарій виявлення може цього не розуміти. Спробуйте цей [сайт ( whatismybrowser.com/)][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 веб-браузера


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

Щодо прийнятої відповіді Whitehawk. Я просто намагаюся додати трохи досвіду. Просто намагався додати коментар, але SO скаржиться, що це занадто довго.

В основному, без встановленого IE 9 перемикач реєстру FEATURE_BROWSER_EMULATION взагалі не працюватиме.

Наприклад, на моєму власному досвіді сьогодні я намагався змусити веб-контроль .net працювати в режимі IE10, тому що один html, який я намагаюся відобразити, не працюватиме з .netControl під VS2012 і навіть не працюватиме, коли я завантажую html в IE8 безпосередньо, як і раніше, css не відображатиметься належним чином (навіть після того, як я скажу, що дозволити заблокований вміст). Але я тестував той самий html ok з 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. застосувати відповідь Whitehawk.

В основному: Щоб контролювати значення цієї функції за допомогою реєстру, додайте ім'я виконуваного файлу до наступного налаштування та встановіть значення відповідно до бажаного параметра.

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 edge, незалежно від директиви! DOCTYPE.

    11000 (0x2AF8) IE11. Веб-сторінки, що містять директиви, засновані на стандартах! DOCTYPE, відображаються в режимі IE11 edge. Значення за замовчуванням для IE11.

    10001 (0x2711) Internet Explorer 10. Веб-сторінки відображаються в режимі IE10 Standards, незалежно від директиви! DOCTYPE.

    10000 (0x02710) Internet Explorer 10. Веб-сторінки, що містять директиви на основі стандартів! DOCTYPE відображаються в режимі IE10 Standards. Значення за замовчуванням для Internet Explorer 10.

    9999 (0x270F) Windows Internet Explorer 9. Веб-сторінки відображаються в режимі IE9 Standards, незалежно від директиви! DOCTYPE.

    9000 (0x2328) Internet Explorer 9. Веб-сторінки, що містять директиви на основі стандартів! DOCTYPE, відображаються в режимі IE9. Значення за замовчуванням для Internet Explorer 9.

    Важливо В Internet Explorer 10 веб-сторінки, що містять директиви на основі стандартів! DOCTYPE, відображаються в режимі IE10 Standards.

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

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

    7000 (0x1B58) Веб-сторінки, що містять засновані на стандартах директиви DOCTYPE, відображаються в режимі IE7 Standards. Значення за замовчуванням для програм, що розміщують WebBrowser Control.

Повне посилання тут


without IE 9 installed, the registry switch EATURE_BROWSER_EMULATION won't work AT ALL.- це неправильно. У мене встановлений лише IE8, і я можу чудово використовувати перемикач, щоб перевести веб-браузер у різні режими візуалізації.
GSerg

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