Replacing .NET WebBrowser control with a better browser, like Chrome?
Is there any relatively easy way to insert a modern browser into a .NET application?
As far as I understand, the WebBrowser
control is a wrapper for IE, which wouldn't be a problem except that it looks like it is a very old version of IE, with all that entails in terms of CSS screw-ups, potential security risks (if the rendering engine wasn't patched, can I really expect the zillion buffer overflow problems to be fixed?), and other issues.
I am using Visual Studio C# (express edition - does it make any difference here?)
I would like to integrate a good web browser in my applications. In some, I just use it to handle the user registration process, interface with some of my website's features and other things of that order, but I have another application in mind that will require more err... control.
I need:
- A browser that can integrate inside a window of my application (not a separate window)
- A good support for CSS, js and other web technologies, on par with any modern browser
- Basic browser functions like "navigate", "back", "reload"...
- Liberal access to the page code and output.
I was thinking about Chrome, since it comes under the BSD license, but I would be just as happy with a recent version of IE.
As much as possible, I would like to keep things simple. The best would be if one could patch the existing WebBrowser
control, which does already about 70% of what I need, but I don't think that's possible.
I have found an activeX control for Mozilla (http://www.iol.ie/~locka/mozilla/control.htm) but it looks like it's an old version, so it's not necessarily an improvement.
I am open to suggestions
Checkout CefSharp .Net bindings, a project I started a while back that thankfully got picked up by the community and turned into something wonderful.
The project wraps the Chromium Embedded Framework and has been used in a number of major projects including Rdio's Windows client, Facebook Messenger for Windows and Github for Windows.
It features browser controls for WPF and Winforms and has tons of features and extension points. Being based on Chromium it's blisteringly fast too.
Grab it from NuGet: Install-Package CefSharp.Wpf
or Install-Package CefSharp.WinForms
Check out examples and give your thoughts/feedback/pull-requests: https://github.com/cefsharp/CefSharp
BSD Licensed
can we Integrate google chrome/Firefox with .net Web Browser , Replacing .NET WebBrowser control with a better browser, like Chrome? Is there any relatively easy way to insert a modern browser into a .NET application? As� Is there any relatively easy way to insert a modern browser into a .NET application? As far as I understand, the WebBrowser control is a wrapper for IE, which wouldn’t be a problem except that it looks like it is a very old version of IE, with all that entails in terms of CSS screw-ups, potential security risks (if the rendering engine wasn’t patched, can I really expect the zillion buffer
Best 20 NuGet webbrowser Packages, Replacing .NET WebBrowser control with a better browser, like Chrome? 分类: 互动问答 | 发布时间: 2009-04-26 17:20:30 | 评论: 20 | 浏览: 353467 | 喜欢: 371. Recommend:c# - Replacing Latest .NET WebBrowser Control with a browser, like Firefox or Chrome n. I need: A browser that can integrate inside a window of my application (not a separate window) A good support for CSS, js and other web technologies, on par with any modern browser Basic browser functions like "navigate", "back", "reload
c Replacing .NET WebBrowser control with a better browser, like , By default, c# .net web browser control uses IE rendering engine to /replacing- net-webbrowser-control-with-a-better-browser-like-chrome. c# - make - Replacing.NET WebBrowser control with a better browser, like Chrome? vb.net chrome browser control (14) Is there any relatively easy way to insert a modern browser into a .NET application?
I had the same problem, the WebBrowser was using an old version of IE, with some googling I came across the following code that makes a change into registry and makes the WebBrowser to use the lastest IE version possible:
public enum BrowserEmulationVersion { Default = 0, Version7 = 7000, Version8 = 8000, Version8Standards = 8888, Version9 = 9000, Version9Standards = 9999, Version10 = 10000, Version10Standards = 10001, Version11 = 11000, Version11Edge = 11001 } public static class WBEmulator { private const string InternetExplorerRootKey = @"Software\Microsoft\Internet Explorer"; public static int GetInternetExplorerMajorVersion() { int result; result = 0; try { RegistryKey key; key = Registry.LocalMachine.OpenSubKey(InternetExplorerRootKey); if (key != null) { object value; value = key.GetValue("svcVersion", null) ?? key.GetValue("Version", null); if (value != null) { string version; int separator; version = value.ToString(); separator = version.IndexOf('.'); if (separator != -1) { int.TryParse(version.Substring(0, separator), out result); } } } } catch (SecurityException) { // The user does not have the permissions required to read from the registry key. } catch (UnauthorizedAccessException) { // The user does not have the necessary registry rights. } return result; } private const string BrowserEmulationKey = InternetExplorerRootKey + @"\Main\FeatureControl\FEATURE_BROWSER_EMULATION"; public static BrowserEmulationVersion GetBrowserEmulationVersion() { BrowserEmulationVersion result; result = BrowserEmulationVersion.Default; try { RegistryKey key; key = Registry.CurrentUser.OpenSubKey(BrowserEmulationKey, true); if (key != null) { string programName; object value; programName = Path.GetFileName(Environment.GetCommandLineArgs()[0]); value = key.GetValue(programName, null); if (value != null) { result = (BrowserEmulationVersion)Convert.ToInt32(value); } } } catch (SecurityException) { // The user does not have the permissions required to read from the registry key. } catch (UnauthorizedAccessException) { // The user does not have the necessary registry rights. } return result; } public static bool SetBrowserEmulationVersion(BrowserEmulationVersion browserEmulationVersion) { bool result; result = false; try { RegistryKey key; key = Registry.CurrentUser.OpenSubKey(BrowserEmulationKey, true); if (key != null) { string programName; programName = Path.GetFileName(Environment.GetCommandLineArgs()[0]); if (browserEmulationVersion != BrowserEmulationVersion.Default) { // if it's a valid value, update or create the value key.SetValue(programName, (int)browserEmulationVersion, RegistryValueKind.DWord); } else { // otherwise, remove the existing value key.DeleteValue(programName, false); } result = true; } } catch (SecurityException) { // The user does not have the permissions required to read from the registry key. } catch (UnauthorizedAccessException) { // The user does not have the necessary registry rights. } return result; } public static bool SetBrowserEmulationVersion() { int ieVersion; BrowserEmulationVersion emulationCode; ieVersion = GetInternetExplorerMajorVersion(); if (ieVersion >= 11) { emulationCode = BrowserEmulationVersion.Version11; } else { switch (ieVersion) { case 10: emulationCode = BrowserEmulationVersion.Version10; break; case 9: emulationCode = BrowserEmulationVersion.Version9; break; case 8: emulationCode = BrowserEmulationVersion.Version8; break; default: emulationCode = BrowserEmulationVersion.Version7; break; } } return SetBrowserEmulationVersion(emulationCode); } public static bool IsBrowserEmulationSet() { return GetBrowserEmulationVersion() != BrowserEmulationVersion.Default; } }
You just need to create a class and put this code in it, then run the following code when the program starts:
if (!WBEmulator.IsBrowserEmulationSet()) { WBEmulator.SetBrowserEmulationVersion(); }
VB.NET:
Imports Microsoft.Win32 Imports System Imports System.Collections.Generic Imports System.IO Imports System.Linq Imports System.Security Imports System.Text Imports System.Threading.Tasks Public Enum BrowserEmulationVersion [Default] = 0 Version7 = 7000 Version8 = 8000 Version8Standards = 8888 Version9 = 9000 Version9Standards = 9999 Version10 = 10000 Version10Standards = 10001 Version11 = 11000 Version11Edge = 11001 End Enum Public Class WBEmulator Private Const InternetExplorerRootKey As String = "Software\Microsoft\Internet Explorer" Public Shared Function GetInternetExplorerMajorVersion() As Integer Dim result As Integer result = 0 Try Dim key As RegistryKey key = Registry.LocalMachine.OpenSubKey(InternetExplorerRootKey) If key IsNot Nothing Then Dim value As Object = If(key.GetValue("svcVersion", Nothing), key.GetValue("Version", Nothing)) Dim Version As String Dim separator As Integer Version = value.ToString() separator = Version.IndexOf(".") If separator <> -1 Then Integer.TryParse(Version.Substring(0, separator), result) End If End If Catch ex As SecurityException 'The user does Not have the permissions required to read from the registry key. Catch ex As UnauthorizedAccessException 'The user does Not have the necessary registry rights. Catch End Try GetInternetExplorerMajorVersion = result End Function Private Const BrowserEmulationKey = InternetExplorerRootKey + "\Main\FeatureControl\FEATURE_BROWSER_EMULATION" Public Shared Function GetBrowserEmulationVersion() As BrowserEmulationVersion Dim result As BrowserEmulationVersion result = BrowserEmulationVersion.Default Try Dim key As RegistryKey = Registry.CurrentUser.OpenSubKey(BrowserEmulationKey, True) If key IsNot Nothing Then Dim programName As String Dim value As Object programName = Path.GetFileName(Environment.GetCommandLineArgs()(0)) value = key.GetValue(programName, Nothing) If value IsNot Nothing Then result = CType(Convert.ToInt32(value), BrowserEmulationVersion) End If End If Catch ex As SecurityException 'The user does Not have the permissions required to read from the registry key. Catch ex As UnauthorizedAccessException 'The user does Not have the necessary registry rights. Catch End Try GetBrowserEmulationVersion = result End Function Public Shared Function SetBrowserEmulationVersion(BEVersion As BrowserEmulationVersion) As Boolean Dim result As Boolean = False Try Dim key As RegistryKey = Registry.CurrentUser.OpenSubKey(BrowserEmulationKey, True) If key IsNot Nothing Then Dim programName As String = Path.GetFileName(Environment.GetCommandLineArgs()(0)) If BEVersion <> BrowserEmulationVersion.Default Then 'if it's a valid value, update or create the value key.SetValue(programName, CType(BEVersion, Integer), RegistryValueKind.DWord) Else 'otherwise, remove the existing value key.DeleteValue(programName, False) End If result = True End If Catch ex As SecurityException ' The user does Not have the permissions required to read from the registry key. Catch ex As UnauthorizedAccessException ' The user does Not have the necessary registry rights. End Try SetBrowserEmulationVersion = result End Function Public Shared Function SetBrowserEmulationVersion() As Boolean Dim ieVersion As Integer Dim emulationCode As BrowserEmulationVersion ieVersion = GetInternetExplorerMajorVersion() If ieVersion >= 11 Then emulationCode = BrowserEmulationVersion.Version11 Else Select Case ieVersion Case 10 emulationCode = BrowserEmulationVersion.Version10 Case 9 emulationCode = BrowserEmulationVersion.Version9 Case 8 emulationCode = BrowserEmulationVersion.Version8 Case Else emulationCode = BrowserEmulationVersion.Version7 End Select End If SetBrowserEmulationVersion = SetBrowserEmulationVersion(emulationCode) End Function Public Shared Function IsBrowserEmulationSet() As Boolean IsBrowserEmulationSet = GetBrowserEmulationVersion() <> BrowserEmulationVersion.Default End Function End Class
You may use it like:
If Not WBEmulator.IsBrowserEmulationSet() Then WBEmulator.SetBrowserEmulationVersion() End If
NET. EO.WebBrowser is a .NET browser engine based on Google's Chrome project. It packs a full featured NET browser controls are a substitute for the default . Coherent UI is powered by the same technology as the Google Chrome bro. WebBrowser Control. The WebBrowser control uses the same Internet Explorer version which is installed on your OS but it doesn't use the latest document mode by default and shows content in compatibility mode.
You can use registry to set IE version for webbrowser control. Go to: HKLM\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION and add "yourApplicationName.exe" with value of browser_emulation To see value of browser_emulation, refer link: http://msdn.microsoft.com/en-us/library/ee330730%28VS.85%29.aspx#browser_emulation
c Replacing .NET WebBrowser control with a better browser, like Chrome? using System.Windows.Forms; using DotNetBrowser; using DotNetBrowser. Although Chrome and Firefox are very popular, it doesn't mean you have to use them. Depending on your needs and browsing habits, there may very well be another browser that's a better fit. In this
Browse other questions tagged winforms google-chrome webkit webbrowser-control or ask your own question. The Overflow Blog How we built it: our new Articles feature for Stack Overflow Teams
Hi I am developing windows application,in that i call webpage using webBrowser control,Actually in web page we use lot of script,if open in webBrowser control by default i call Microsoft browser,so it block the script,so i need to use chrome in webBrowser control.
How to open Google chrome browser in webbrowser control in winfoms using C#.net? How to use webbrowser controller pop up the web page with the HTML element change? Problem with .NET webbrowser and registry
Comments
- Why do you say that the WebBrowser control uses an old version of IE? It uses the version installed on the user's system, although the IE8 WebBrowser appears to default to IE7 rendering: blogs.msdn.com/ie/archive/2009/03/10/…
- Because it doesn't look that way on my machine. I have IE8 installed but the control shows display issues that I haven't see since IE 5. A very simple login form, 2 fields with a touch of CSS has a garbled display, and some javascript display doesn't work, whereas it displays fine in IE8, Firefox, Chrome, Opera ... so I assumed the rendering engine was an old one. I could be completely wrong about that and perhaps the problem is in fact different from what I thought.
- @Sylverdrag: You are wrong. It uses the latest IE on your system. However, I read somewhere that the WebBrowser control has a stronger backwards-compatibility issue than the standalone browser. IE8 can have, for instance, an icon to click to turn on IE7 mode. As part of your program, this is not possible, so the control defaults to the earlier mode for compatability. OTOH, I haven't read how to set it to use "IE8 mode".
- Actually, John sanders, you are wrong. It uses ie4 and you need to change a registry value to tell it to use current. Look up "feature mode emulation" and you'll get ur answers, changed recently, used to include keyword native but they changed it, google the keywords I mentioned with "webbrowser control" and u will find msdn article.
- By default, a hosted
WebBrowser
control uses IE7 emulation, unless instructed otherwise withFEATURE_BROWSER_EMULATION
. This is documented here: blogs.msdn.com/b/askie/archive/2009/03/23/… - I switched to CEfSharp from OWS, and I can assertively say it is of very high quality and active community. Love it. github.com/cefsharp/CefSharp
- CefSharp is great but be aware that the libraries are faily large (20+ mb last I looked) so they might not be right for a more lightweight project.
- @ANguyen yes you can
- Very very happy to know that it's you who started this project! Recently I used cefsharp, however, I could see that the library size is 80+ MB which is huge, but required for proper functioning (Especially smooth rendering) of the application. Is there any way to reduce this?
- This broke my project. All references broken after installing winforms nuget package.