Is it possible for the .NET WebBrowser control to use IE9?
I realise it's an early release and unstable.开发者_如何学Python I wouldn't dream of swapping out the default webbrowser control for IE9 in any other project, but in this case I specifically need IE9 to compare alongside other versions.
I'd like to have the .NET WebBrowser control use IE9 instead of the default version of IE on the machine. I have full control of the machine so it's no problem to hack away at system files or whatever else may be necessary.
Normally, this could be achieved by installing the update to IE, but in IE9's case, it installs a separate application, leaving the current version of IE untouched. This means the WebBrowser control continues to use the current version (which makes sense and was a smart move by MS, since IE9 is still under development). But in my (edge) case I need the WebBrowser control to use IE9.
Is it possible to embed IE9 in a .NET forms application?
EDIT
With Hans Passant's help I'm getting a bit further. Something very interesting is happening within IE9's prog files directory. There's a directory called "iepreview.exe.local" which, when removed, makes the IE9 Preview app use IE8 (checked it with the acid3 test).
Not quite what I want, but I'm wondering if this is some kind of redirection that I could exploit for my needs.
EDIT 2
I've tried applying the .local hack to both my copy of iexplore.exe and my .NET app and I've noticed something else interesting - both apps began using IE7 instead of IE8 (my version of IE) or IE9.
Could this be iexplore trying to use IE9 and then falling back onto IE7? Seems strange it would even have IE7 available, but that's the useragent string it starts using.
Actually, you can modify your registry to force your program to use IE9 rendering. Go to HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION and add a new DWORD value named your program name (with .exe) and a decimal value set to 9999.
You can also modify your registry to force your program to use IE9 GPU Rendering. Go to HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_GPU_RENDERING and add a new DWORD value named your program name (with .exe) and a hexadecimal value set to 1.
THIS ONLY WORKS IF YOU ACTUALLY HAVE IE9! You must download IE9 first, before you do this, or it will not work. If you want to render the pages with IE8 just change the 9999 to 8888.
Note: GPU Rendering is only available in IE9
The only way IE9 could install side-by-side is when it uses new GUIDs for the interfaces and coclasses. Which means that you cannot use WebBrowser, it has the GUIDs hard-coded.
There's one other option, using the AxHost wrapper. Right-click the toolbox, Choose Items, select the COM Components tab and locate IE9 in the list. No idea what it might be called, the old name was "Microsoft Web Browser", serviced by c:\windows\system32\ieframe.dll
You'll have to make do without the friendly WebBrowser and HtmlDocument wrapper classes.
After a lot of Google-ing I have discovered that there are two different sets of keys for FEATURE_BROWSER_EMULATION for 32 bit and 64 bit applications. You need to set yours in the right place depending on the machine you are running. Also you need to make sure you install the correct version of the browser you want to emulate.
32 bit:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\**FEATURE_BROWSER_EMULATION**
Value Key: (DWORD) yourapplication.exe
64 bit:
HKEY_LOCAL_MACHINE\SOFTWARE\**Wow6432Node**\Microsoft\Internet Explorer\MAIN\FeatureControl\**FEATURE_BROWSER_EMULATION**
Value Key: (DWORD) yourapplication.exe
The value to set this key to is (taken from MSDN here) as decimal values:
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.
精彩评论