Will the IE9 WebBrowser Control Support all of IE9's features, including SVG?
Asked Answered
Z

12

85

I recently upgraded to IE9-beta. Now, In my .Net (3.5) WinForm application I want to use WebBrowser control.

So my question is, whether the WebBrowser control will exhibit all properties and functions of IE9?

My concern is, I want to render some SVG graphics on it.

Zachariah answered 6/1, 2011 at 6:8 Comment(0)
C
84

The IE9 "version" of the WebBrowser control, like the IE8 version, is actually several browsers in one. Unlike the IE8 version, you do have a little more control over the rendering mode inside the page by changing the doctype. Of course, to change the browser mode you have to set your registry like the earlier answer. Here is a reg file fragment for 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

Here is the complete set of codes:

  • 9999 (0x270F) - Internet Explorer 9. Webpages are displayed in IE9 Standards mode, regardless of the !DOCTYPE directive.
  • 9000 (0x2328) - Internet Explorer 9. Webpages containing standards-based !DOCTYPE directives are displayed in IE9 mode.
  • 8888 (0x22B8) -Webpages are displayed in IE8 Standards mode, regardless of the !DOCTYPE directive.
  • 8000 (0x1F40) - Webpages containing standards-based !DOCTYPE directives are displayed in IE8 mode.
  • 7000 (0x1B58) - Webpages containing standards-based !DOCTYPE directives are displayed in IE7 Standards mode.

The full docs:

http://msdn.microsoft.com/en-us/library/ee330730%28VS.85%29.aspx#browser_emulation

Codie answered 18/3, 2011 at 19:55 Comment(3)
With IE 9 installed, it doesn't seem possible to get a page to render in IE 8 mode. Setting the value to 7000 puts in IE 7 mode, and 8000/8888/9000/9999 put it in IE 9 mode. Whether this is some kind of bug or whether it's intentional I don't know though.Microgroove
I had to add the key to both current_user and local_machine before it would start working for me. But was successful after.Anticipate
This blog post, weblog.west-wind.com/posts/2012/feb/15/… mentions that the Registry entry will vary depending on whether 32 bit or 64 bit Windows. 32 bit HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION and 64 bit HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION.Coitus
M
131

WebBrowser control will use whatever version of IE you have installed, but for compatibility reasons it will render pages in IE7 Standards mode by default.

If you want to take advantage of new IE9 features, you should add the meta tag <meta http-equiv="X-UA-Compatible" content="IE=9" > inside the <head> tag of your HTML page.

This meta tag must be added before any links to CSS, JavaScript files etc that are also in your <head> to work properly though (only other <meta> tags or the <title> tag can come before it).

An alternative is to add a registry entry to:

HKLM > SOFTWARE > Microsoft > Internet Explorer > Main > FeatureControl > FEATURE_BROWSER_EMULATION

And in there add 'myApplicationName.exe' with value '9000' to force the WebBrowser control to display pages in IE9 mode. Though there are other values you can use too too, note that these docs aren't entirely accurate as it does not seem possible to get a page to render in IE 8 mode whatever value you use.

Adding the registry key to the same path in HKCU instead of HKLM will also work - this is useful as writing to HKLM requires admin privileges where as HKCU does not.

Microgroove answered 6/1, 2011 at 8:23 Comment(5)
The different values for the content part can be found here: msdn.microsoft.com/en-us/library/ie/ms533876(v=vs.85).aspxChaetopod
If this setting could be stored in an CSS file I would be happier. Now I have to go through many documents or is there a multiline search-and-replace function in Visual Studio?Chaetopod
I tried the meta tag but it would not work. I was getting an error message stating "HTML1115: X-UA-Compatible META tag (‘IE=9′) ignored because document mode is already finalized.", which lead me to the webpage evolpin.wordpress.com/2011/02/25/…. The solution was then to ensure that the meta tag was the first element inside the <head> block.Euchre
Be careful, if you are running 32-bit applications (that call the 32-bit MSIE) on a 64-bit Windows, the registry entry should be added to HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION instead.Labionasal
I was rendering html through xsl/xslt and the regedit didn't worked for some reason... The meta did the trick. Thanks!Plosion
C
84

The IE9 "version" of the WebBrowser control, like the IE8 version, is actually several browsers in one. Unlike the IE8 version, you do have a little more control over the rendering mode inside the page by changing the doctype. Of course, to change the browser mode you have to set your registry like the earlier answer. Here is a reg file fragment for 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

Here is the complete set of codes:

  • 9999 (0x270F) - Internet Explorer 9. Webpages are displayed in IE9 Standards mode, regardless of the !DOCTYPE directive.
  • 9000 (0x2328) - Internet Explorer 9. Webpages containing standards-based !DOCTYPE directives are displayed in IE9 mode.
  • 8888 (0x22B8) -Webpages are displayed in IE8 Standards mode, regardless of the !DOCTYPE directive.
  • 8000 (0x1F40) - Webpages containing standards-based !DOCTYPE directives are displayed in IE8 mode.
  • 7000 (0x1B58) - Webpages containing standards-based !DOCTYPE directives are displayed in IE7 Standards mode.

The full docs:

http://msdn.microsoft.com/en-us/library/ee330730%28VS.85%29.aspx#browser_emulation

Codie answered 18/3, 2011 at 19:55 Comment(3)
With IE 9 installed, it doesn't seem possible to get a page to render in IE 8 mode. Setting the value to 7000 puts in IE 7 mode, and 8000/8888/9000/9999 put it in IE 9 mode. Whether this is some kind of bug or whether it's intentional I don't know though.Microgroove
I had to add the key to both current_user and local_machine before it would start working for me. But was successful after.Anticipate
This blog post, weblog.west-wind.com/posts/2012/feb/15/… mentions that the Registry entry will vary depending on whether 32 bit or 64 bit Windows. 32 bit HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION and 64 bit HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION.Coitus
F
26

Thank goodness I found this. The following is extremely important:

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

Without this, none of the reports I'd been generating would work post IE9 install despite having worked great in IE8. They would show up properly in a web browser control, but there would be missing letters, jacked up white space, etc, when I called .Print(). They were just basic HTML that should be capable of being rendered even in Mosaic. heh Not sure why the IE7 compatibility mode was going haywire. Notably, you could .Print() the same page 5 times and have it be missing different letters each time. It would even carry over into PDF output, so it's definitely the browser.

Fremantle answered 15/3, 2011 at 17:15 Comment(0)
P
17

A note about 64bit Windows which seems to trip up a few folks. If your app is running under 64bit Windows, you likely have to set the DWORD under [HKLM\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION] instead.

Paste answered 15/9, 2012 at 14:44 Comment(0)
D
16

Just to be complete...

For 32 bit OS you must add a registry entry to:

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

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

For 64 bit OS you must add a registry entry to:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION

This entry must be a DWORD, with the name being the name of your executable, that hosts the Webbrowser control; i.e.:

myappname.exe (DON'T USE "Contoso.exe" as in the MSDN web page...it's just a placeholder name)

Then give it a DWORD value, according to the table on:

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

I changed to 11001 decimal or 0x2AF9 hex --- (IE 11 EMULATION) since that isn't the DEFAULT value (if you have IE 11 installed -- or whatever version).

That MSDN article contains notes on several other Registry changes that affects Internet Explorer web browser behavior.

Dayna answered 8/1, 2014 at 22:57 Comment(3)
The DWORD part is very important. QWORD won't work and one can easily make that mistake.Purtenance
I would add that, when you are debugging under VS, you should add also an entry for myappname.vshost.exe. On the other hand, I suspect that simply launching the app out of the debugger and then in the debugger would also do the trick. I think it worked once for me; but I'm not 100% sure.Pasta
Because of my IE11 configuration, I needed to open IE11 and add the destination URL to my trusted sites. Without this, even though my registry was properly configured, the page scripts would not run.Melidamelilot
R
15

I know this thread is old and there are already comprehensive answers.

Just in case you don't know this:

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

You don't have to hardcode IE version number as

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

Resistencia answered 23/1, 2015 at 9:9 Comment(6)
This is unrelated to the issue - the WebBrowser control only loads in IE7 mode unless overriden with a registry setting for your particular program.Stibine
@Stibine Are you sure? As far as I can tell, if the web page contains <meta http-equiv="X-UA-Compatible" content="IE=edge" > in the header, the webBrowser will load in the latest IE mode. Why are there 90+ upvotes to mikel's anwer? because his solution works. Changing registry is not needed if you can change the web page.Resistencia
I'm 100% positive, however I think it also depends on the website location. I've been loading local content and the only way the version would budge is through the registry. Trust me, I'd throw the registry solution away for anything else that works, but nothing else seemed to work.Stibine
ie=edge worked for me, without me touching the registry. thanks!Alarice
@Stibine this is indeed related to the question - solution works well.Vaginate
Thank you; it helped me to compose a SVG-able CHM help file that works on every Windows 7 and Windows 10 PC regardless of IE settings.Lucic
T
6

I totally agree with the solution provided, but I think a little clarification is important I think, might be necessary.

For each process (read also: vshost.exe, yourWinformApplication.exe.svchost, or the name of your application.exe) that will need to add a DWORD with the value provided, in my case I leave 9000 (in decimal) in application name and running smoothly and error-free script.

the most common mistake is to believe that it is necessary to add "contoso.exe" AS IS and think it all work!

Tbar answered 12/7, 2012 at 15:10 Comment(0)
H
3

Yes, WebBrowser control uses whatever version of IE you have installed. This means of course that if you run your application on a machine with IE 8 then the IE 9 features you depend on will not be available.

Heavyladen answered 6/1, 2011 at 6:14 Comment(3)
Re-read my answer again. The downvote was uncalled for. I said that if he tries to use IE9 features then deploys to a machine without IE9, those features will not work. Your backward compatibility registry setting will not change that fact.Heavyladen
Your first sentence is patently false. Your second sentence, at the very least is both obvious and lazy. BTW thanks for the retributionary downvote. Very mature.Codie
The WebBrowser control does use whatever version of IE is installed; however the detection script may not realize that. Try this [site (whatismybrowser.com/)][1]. I know other sites gave me the wrong information, but this site correctly identified the browser as the version of IE that was installed on my machine. [1]: whatismybrowser.comScapula
T
3

I came to this solution and it did not worked for me! Because I was using 64bit I had to replace the registry:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION

Instead of the one that everyone talks about:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION]
Tout answered 7/12, 2013 at 17:25 Comment(0)
J
1

I liked the (C#) code in the following which sets the registry settings for your app. Not sure if it will cut it after installation though if permissions are required. For me it solved an issue with WebSocket not being available inside a WebBrowser control in WPF.

C# webbrowser Ajax call

Joerg answered 30/12, 2013 at 22:20 Comment(0)
D
1

I had the same problem, and the registry answers here didn't work.

I had a browser control in new version of my program that worked fine on XP, failed in Windows 7 (64 bit). The old version worked on both XP and Windows 7.

The webpage displayed in the browser uses some strange plugin for showing old SVG maps (I think its a Java applet).

Turns out the problem is related to DEP protection in Windows 7.

Old versions of dotnet 2 didn't set the DEP required flag in the exe, but from dotnet 2, SP 1 onwards it did (yep, the compiling behaviour and hence runtime behaviour of exe changed depending on which machine you compiled on, nice ...).

It is documented on a MSDN blog NXCOMPAT and the C# compiler. To quote : This will undoubtedly surprise a few developers...download a framework service pack, recompile, run your app, and you're now getting IP_ON_HEAP exceptions.

Adding the following to the post build in Visual Studio, turns DEP off for the exe, and everything works as expected:

all "$(DevEnvDir)..\tools\vsvars32.bat"
editbin.exe /NXCOMPAT:NO "$(TargetPath)"
Drudge answered 21/10, 2014 at 12:13 Comment(0)
M
-3

Regarding whitehawk's accepted answer. I am just trying to add a bit hands on experience. Was just trying to add a comments, but SO complains it's too long.

Basically, without IE 9 installed, the registry switch FEATURE_BROWSER_EMULATION won't work AT ALL.

For example, my own experience today I was trying to get the .net webcontrol to work with IE10 mode because one html I am trying to render won't work with .netControl under VS2012, and not even work when I load the html to IE8 directly, still css won't render properly(even after I say allow blocked content). But I have tested the same html ok with IE10 on a friend's win 8 machine. That's why I am trying to set the .net webControl to IE 10 mode but just keeps failing...

Now I figured this is bcos my win 7 machine only have IE8 installed, so regardless which value I set to the FEATURE_BROWSER_EMULATION switch(value to IE9, IE10 IE11), it just won't work AT ALL !

Then I downloaded and installed IE 10 on my win 7 machine. Still it won't work, then I added the FEATURE_BROWSER_EMULATION, it started working !

Also I noticed regardless which value I set , even set it to value 0 by default, the webControl is still using IE 10 mode which still works for me.

So to summarise, If you have IE X installed but you want your .Net webControl to work under IE (X+N) N>0 modo, TWO things you need to do:

  1. Go to MS website & download and install IE (X+N) on your machine, you will need to reboot after installation.

  2. apply whitehawk's answer.

Basically: To control the value of this feature by using the registry, add the name of your executable file to the following setting and set the value to match the desired setting.

HKEY_LOCAL_MACHINE (or HKEY_CURRENT_USER)
   SOFTWARE
      Microsoft
         Internet Explorer
            Main
               FeatureControl
                  FEATURE_BROWSER_EMULATION
                     contoso.exe = (DWORD) 00009000

Windows Internet Explorer 8 and later. The FEATURE_BROWSER_EMULATION feature defines the default emulation mode for Internet Explorer and supports the following values.

Value Description

  • 11001 (0x2AF9 Internet Explorer 11. Webpages are displayed in IE11 edge mode, regardless of the !DOCTYPE directive.

    11000 (0x2AF8) IE11. Webpages containing standards-based !DOCTYPE directives are displayed in IE11 edge mode. Default value for IE11.

    10001 (0x2711) Internet Explorer 10. Webpages are displayed in IE10 Standards mode, regardless of the !DOCTYPE directive.

    10000 (0x02710) Internet Explorer 10. Webpages containing standards-based !DOCTYPE directives are displayed in IE10 Standards mode. Default value for Internet Explorer 10.

    9999 (0x270F) Windows Internet Explorer 9. Webpages are displayed in IE9 Standards mode, regardless of the !DOCTYPE directive.

    9000 (0x2328) Internet Explorer 9. Webpages containing standards-based !DOCTYPE directives are displayed in IE9 mode. Default value for Internet Explorer 9.

    Important In Internet Explorer 10, Webpages containing standards-based !DOCTYPE directives are displayed in IE10 Standards mode.

    8888 (0x22B8) Webpages are displayed in IE8 Standards mode, regardless of the !DOCTYPE directive.

    8000 (0x1F40) Webpages containing standards-based !DOCTYPE directives are displayed in IE8 mode. Default value for Internet Explorer 8 Important In Internet Explorer 10, Webpages containing standards-based !DOCTYPE directives are displayed in IE10 Standards mode.

    7000 (0x1B58) Webpages containing standards-based !DOCTYPE directives are displayed in IE7 Standards mode. Default value for applications hosting the WebBrowser Control.

Full ref here

Mission answered 21/3, 2014 at 23:8 Comment(2)
without IE 9 installed, the registry switch EATURE_BROWSER_EMULATION won't work AT ALL. - this is wrong. I only have IE8 installed and I can perfectly use the switch to put webbrowser into different rendering modes.Nonet
I have tried IE8 installed trying to get IE10 mode, won't work at all ! Just tried again, didn't workMission

© 2022 - 2024 — McMap. All rights reserved.