将 .NET WebBrowser 控件替换为更好的浏览器(如 Chrome)?[关闭]

Replacing .NET WebBrowser control with a better browser, like Chrome? [closed]

提问人:Sylverdrag 提问时间:4/26/2009 最后编辑:Ashkan Mobayen KhiabaniSylverdrag 更新时间:9/6/2022 访问量:543940

问:


我们不允许提出有关书籍、工具、软件库等建议的问题。您可以编辑问题,以便用事实和引文来回答。

3年前关闭。

社群在 2 年前审查了是否重新打开这个问题,并关闭了这个问题:

原始关闭原因未解决

有没有一种相对简单的方法可以将现代浏览器插入 .NET 应用程序?

据我了解,该控件是 IE 的包装器,这不会成为问题,只是它看起来像是一个非常旧版本的 IE,所有这些都涉及 CSS 搞砸、潜在的安全风险(如果渲染引擎没有打补丁,我真的可以指望数以百万计的缓冲区溢出问题得到解决吗? 等问题。WebBrowser

我正在使用 Visual Studio C#(精简版 - 它在这里有什么区别吗?

我想在我的应用程序中集成一个好的 Web 浏览器。在某些情况下,我只是用它来处理用户注册过程,与我的网站的某些功能进行交互以及该顺序的其他事情,但我想到了另一个应用程序,需要更多的错误......控制。

我需要:

  • 可以集成到我的应用程序的窗口(不是单独的窗口)内的浏览器
  • 对 CSS、js 和其他 Web 技术的良好支持,与任何现代浏览器相媲美
  • 基本的浏览器功能,如“导航”、“返回”、“重新加载”......
  • 自由访问页面代码和输出。

我正在考虑 Chrome,因为它属于 BSD 许可证,但我对最新版本的 IE 同样满意。

我想尽可能地让事情变得简单。最好的办法是可以修补现有的控件,它已经完成了我需要的大约 70%,但我认为这是不可能的。WebBrowser

我找到了Mozilla(http://www.iol.ie/~locka/mozilla/control.htm)的activeX控件,但看起来是旧版本,所以不一定是改进。

我愿意接受建议

C# .NET WinForms Web浏览器控件

评论

19赞 Tim Robinson 4/26/2009
为什么说 WebBrowser 控件使用旧版本的 IE?它使用安装在用户系统上的版本,尽管 IE8 WebBrowser 似乎默认为 IE7 渲染:blogs.msdn.com/ie/archive/2009/03/10/...
21赞 Sylverdrag 4/26/2009
因为它在我的机器上看起来不是那样的。我安装了 IE8,但控件显示自 IE 5 以来我从未见过的显示问题。一个非常简单的登录表单,带有 CSS 的 2 个字段显示乱码,一些 javascript 显示不起作用,而它在 IE8、Firefox、Chrome、Opera 中显示良好......所以我假设渲染引擎是一个旧的引擎。我可能完全错了,也许问题实际上与我想象的不同。
3赞 John Saunders 4/27/2009
@Sylverdrag:你错了。它使用系统上最新的 IE。但是,我在某处读到,WebBrowser 控件比独立浏览器具有更强的向后兼容性问题。例如,IE8 可以有一个图标来单击以打开 IE7 模式。作为程序的一部分,这是不可能的,因此控件默认为早期模式以实现兼容性。OTOH,我还没有读过如何将其设置为使用“IE8 模式”。
59赞 Erx_VB.NExT.Coder 10/1/2010
实际上,约翰·桑德斯,你错了。它使用 ie4,您需要更改注册表值以告诉它使用 current。查找“功能模式仿真”,你会得到你的答案,最近发生了变化,曾经包括关键字原生,但他们改变了它,谷歌我提到的“网络浏览器控制”的关键词,你会发现msdn文章。
9赞 noseratio 6/26/2014
默认情况下,托管控件使用 IE7 仿真,除非另有指示。这记录在这里:blogs.msdn.com/b/askie/archive/2009/03/23/......WebBrowserFEATURE_BROWSER_EMULATION

答:

84赞 Chris S 4/26/2009 #1

如果您不知道,Chrome 会使用 Webkit(的一个分支),Safari 也使用它。以下是一些相同的问题:

webkit 版本并不像另一个答案所说的那样好,一个版本不再有效(谷歌代码版本),而 Mono 版本是实验性的。如果有人努力为它制作一个像样的 .NET 包装器,那就太好了,但这似乎不是任何人想做的事情——这很令人惊讶,因为它现在支持 HTML5 和 IE(8) 引擎所缺乏的许多其他功能。

更新 (2014)

有一个新的双重许可项目,允许您将 Chrome 嵌入到 .NET 应用程序中,称为 Awesomium。它带有一个 .NET API,但需要相当多的技巧来呈现(示例将浏览器窗口绘制到缓冲区,将缓冲区绘制为图像并在计时器上刷新)。

我认为这是 Origin 在《战地风云 3》中使用的浏览器。

更新 (2016)

现在有 DotnetBrowser,它是 Awesomium 的商业替代品。它基于 Chromium。

评论

0赞 Sylverdrag 4/26/2009
谢谢。我会看看 Gecko 包装纸。但有一件事,最初的答案是“您需要做的就是注册Mozilla ActiveX控件”,我认为Express版本无法注册其他控件。我是否遗漏了一些明显的东西?
4赞 Joel Coehoorn 4/9/2010
@Syl速成版可以根据需要注册任意数量的控件。他们不会做的是让你将插件安装到 Visual Studio。
1赞 Sumit Ghosh 12/11/2010
我在将 WebKit 与 C# 一起使用时有过非常糟糕的经历,最后我不得不选择 .NET 附带的默认 Web 浏览器组件
1赞 Kraang Prime 4/1/2015
截至目前,上述项目还不是可行的替代项目。编译器错误大量 + 不稳定。Awesomium,是完全的垃圾。
0赞 BillHaggerty 2/3/2016
“我认为这是《战地风云3》中Origin使用的浏览器。”这是不正确的。我知道这一点,因为我不得不强制这个应用程序在 Windows ten 上使用 ie,因为当它默认为 edge 时,它不起作用。这是不久前的事了,可能是一个已解决的问题。
194赞 chillitom 12/4/2010 #2

查看 CefSharp .Net 绑定,这是我不久前开始的一个项目,值得庆幸的是,它被社区所接受并变成了一些美妙的东西。

该项目包装了 Chromium 嵌入式框架,并已用于许多主要项目,包括 Rdio 的 Windows 客户端、Windows 版 Facebook Messenger 和 Windows 版 Github。

它具有 WPFWinforms 的浏览器控件,并具有大量功能和扩展点。基于 Chromium,它的速度也非常快。

从 NuGet 获取它:或dotnet add package CefSharp.Wpfdotnet add package CefSharp.WinForms

查看示例并给出您的想法/反馈/拉取请求: https://github.com/cefsharp/CefSharp

BSD 许可

评论

3赞 Vin 10/19/2013
我从 OWS 切换到 CEfSharp,我可以肯定地说它具有非常高质量和活跃的社区。爱上它。github.com/cefsharp/CefSharp
3赞 Skyl3lazer 1/14/2015
CefSharp 很棒,但请注意,这些库的故障很大(我上次看了 20+ mb),因此它们可能不适合更轻量级的项目。
9赞 toddmo 9/16/2017
这破坏了我的项目。安装 winforms nuget 包后,所有引用都已损坏。
3赞 Kristina Lex 10/24/2020
我也是一样。它迫使您将调试平台更改为 AnyCPU 以外的任何平台。为什么我需要更改我的项目设置才能嵌入浏览器?荒谬
1赞 drewmerk 11/10/2020
@AhmedEissa我遇到了同样的问题。我通过使用快速入门指南中的示例代码解决了它: github.com/cefsharp/CefSharp/wiki/Quick-Start 即 var browser = new ChromiumWebBrowser(“www.google.com”);父母。Controls.Add(浏览器);
28赞 golavietnam 10/24/2011 #3

您可以使用注册表来设置 Web 浏览器控件的 IE 版本。 转到:HKLM\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION 并添加值为 browser_emulation 的“yourApplicationName.exe” 要查看browser_emulation值,请参阅链接:http://msdn.microsoft.com/en-us/library/ee330730%28VS.85%29.aspx#browser_emulation

评论

12赞 newenglander 1/24/2012
如果要在 Visual Studio 中进行调试,则可能必须使用“yourApplicationName.vshost.exe”
3赞 Daniel Vygolov 5/19/2014
如果要在 Visual Studio 中进行调试,则只需取消选中项目属性的“调试”选项卡上的“启用 Visual Studio 托管进程”即可。然后,您可以使用没有“vshost”部分的 exe 名称。
2赞 jay_t55 6/24/2014
@golavietnam你能帮我解决这个问题吗,我尝试了你的说明,并使用了你提供的链接上的说明,但仍然不起作用。当我使用 Web 浏览器控件访问 WhatIsMyBrowser.com 时,它告诉我我在 ie7 兼容模式下使用 ie11 BUT,许多网站拒绝工作并给我一条“请升级您的浏览器”消息。我怎样才能强制 webbrowser 控件使用已安装的最新版本的 ie (ie11) 这种方式不起作用,我已经尝试了一百次。
68赞 formatc 2/3/2013 #4

几天来,我一直在测试 C# Web 浏览器组件的替代品,这是我的列表:

1. 使用较新的 IE 版本 8,9:

Web 浏览器组件是 IE7 而不是 IE8?如何改变这一点?

优点:

  • 运行它不需要太多工作
  • 如果 IE9 支持一些 HTML5/CSS3,如果 IE10 支持,则完全支持

缺点:

  • 目标计算机必须安装目标 IE 版本,IE10 在 Win7 上仍处于预览状态

这不需要太多工作,你可以获得一些HTML5和CSS3支持,尽管IE9缺乏一些最好的CSS3和HTML5功能。但我相信你可以让IE10以同样的方式运行。问题是目标系统必须安装 IE10,并且由于在 Windows 7 上仍处于预览状态,我建议不要安装它。

2. OpenWebKit夏普

OpenWebKitSharp 是基于 WebKit.NET 0.5 项目的 webkit 引擎的 .net 包装器。WebKit 是 Chrome/Safari 使用的布局引擎

优点:

  • 积极开发
  • HTML5/CSS3 支持

缺点:

  • 许多功能未实现
  • 不支持 x64(必须为 x86 生成应用)Doesn't support x64 (App must be built for x86)

OpenWebKit 非常好,尽管许多功能尚未实现,但我在 Visual Studio 中使用它时遇到了一些问题,它在这里抛出空对象引用,然后在设计模式下,存在一些 js 问题。使用它的每个人几乎都会立即注意到 js alert 什么都不做。mouseup、mousedown...等等不起作用,js拖放有bug等等。

我在安装它时也遇到了一些困难,因为它需要安装特定版本的 VC 可再发行组件,因此在异常后我查看了事件日志,找到了 VC 版本并安装了它。

3. 壁虎FX

优点:

  • 适用于单声道
  • 积极开发
  • HTML5/CSS3 支持

缺点:

  • D̶o̶e̶s̶n̶'̶t̶ ̶s̶u̶p̶p̶o̶r̶t̶ ̶x̶6̶4̶ ̶(̶A̶p̶p̶ ̶m̶u̶s̶t̶ ̶b̶e̶ ̶b̶u̶i̶l̶t̶ ̶f̶o̶r̶ ̶x̶8̶6̶)̶ - 请参阅下面的评论

GeckoFX 是一个跨平台的 Webrowser 控件,用于嵌入到 WinForms 应用程序中。这可以与 Windows 上的 .NET 和 Linux 上的 mono 一起使用。 Gecko 是 Firefox 使用的布局引擎。

我碰到了一些关于GeckoFX没有积极开发的信息,这是不正确的,当然它总是比Firefox落后一两个版本,但这是正常的,活动和控件本身给我留下了深刻的印象。它完成了我需要的一切,但我需要一些时间来运行它,这里有一个小教程来运行它:

  1. 下载 GeckoFx-Windows-16.0-0.2,在这里您可以检查是否有更新的 GeckoFX 可用
  2. 添加对两个下载的 dll 的引用
  3. 由于 GeckoFX 是您需要 XulRunner 的包装器,请前往版本列表查看您需要哪一个
  4. 现在我们知道我们需要哪个版本的 XulRunner,我们转到 Mozilla XulRunner 版本,转到版本文件夹 -> 运行时 -> xulrunner-(your_version).en-US.win32.zip,在我们的例子中是 xulrunner-16.0.en-US.win32.zip
  5. 解压缩所有内容并将所有文件复制到 bin\Debug(或释放 您的项目已设置为发布)
  6. 转到窗体的 Visual Studio 设计器,转到工具箱,右键单击内部 -> 选择项目 -> 浏览 -> 查找下载的 GeckoFX winforms dll 文件 ->确定
  7. 现在你应该有了新的控件 GeckoWebBrowser

如果你真的必须使用Chrome,看看这个叫做Awesomium的产品,它对非商业项目是免费的,但商业项目的许可证要几千美元。

评论

5赞 Alex Essilfie 6/9/2013
非常好的描述如何让GeckoFx启动和运行。+1
0赞 bernhardrusch 9/27/2013
在构建 Geckofx-Winforms 时,我需要 4 个 gtk# 库(atk-sharp、gdk-sharp、glib-sharp 和 gtk-sharp),所以我必须先安装 Mono。
0赞 Mike Cole 3/1/2014
这个答案很壮观。
0赞 whyoz 2/24/2015
GeckoFx 现在支持 64 位,所以只需转到此处:bitbucket.org/geckofx 然后在此处:ftp.mozilla.org/pub/mozilla.org/xulrunner/releases 并将亚军版本与最新的 GeckoFX 版本号匹配,您应该可以开始了
2赞 formatc 4/2/2015
@Wayne如果你想正确地做到这一点,你应该在你的项目或一个单独的项目中创建一个文件夹,其中你将包含所有文件、Gecko FX DLL 和 XUL Runner 文件,并将它们设置为始终复制,然后在每个构建操作中,它们都会被复制到你的构建/调试文件夹,或者如果你从 VS 发布,它们就会被发布。 还有你应该调用的 Xpcom.Initialize 方法,你可以将它传递给 xul runner 文件路径,希望对您有所帮助
1赞 user2319683 8/8/2013 #5

Geckofx 和 Webkit.net 起初都很有前途,但它们并没有分别跟上 Firefox 和 Chrome 的最新步伐,而随着 Internet Explorer 的改进,Web 浏览器控件也是如此,尽管它的行为默认类似于 IE7,无论您拥有什么 IE 版本,但这可以通过进入注册表并将其更改为允许 HTML5 的 IE9 来修复。

22赞 UnimpressedCoder 5/5/2014 #6

我知道这不是“替代”WebBrowser 控件,但是在显示使用 BootStrap 3+ 进行布局等的页面时,我遇到了一些可怕的渲染问题,然后我发现了一篇建议我使用以下内容的帖子。显然,它是特定于 IE 的,并告诉它使用在客户端机器上找到的最新变体进行渲染(因此它不会使用 IE7,我认为这是默认设置)。

所以就放:

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

在文档头部的某个位置。

显然,如果它不是您的文档,这将无济于事 - 尽管我个人认为如果您正在阅读不是通过 WebBrowser 控件自己创建的页面,这是一个安全漏洞 - 为什么不直接使用 Web 浏览器!

评论

2赞 Sylvain 5/8/2014
如果你想让它在运行 IE7 的 PC 上运行,不要把它放在某个地方,把它作为 的第一个子项。我们花了一段时间才弄清楚这一点。<head><head>
1赞 Sylvain 5/8/2014
对不起,在我之前的评论中,我的意思是 IE8 而不是 IE7。所以在 IE8 上,如果你不把 作为 的第一个子项,它将在兼容模式下运行,而不是在边缘模式下运行。<meta><head>
0赞 Kywillis 7/15/2014
我在 winform 应用程序中使用 webbrowser 插件,这是一个巨大的帮助。我点击的页面正在使用jquery和angularjs,这令人窒息,因为它认为浏览器是IE7,即使我安装了IE10。
0赞 freedeveloper 2/14/2015
这对我有用!您也可以使用它来设置为特定版本的 IE,例如:<meta http-equiv=“X-UA-Compatible” content=“IE=10” />并且浏览器始终以 10 为工作(当然您需要安装相同版本或更高版本
0赞 MD Luffy 3/19/2015
这非常适合我的用例。我想显示更好的 html 格式的报告。已经有很多CSS内容可用。这是比嵌入 chrome/firefox 更好的方法。
51赞 Ashkan Mobayen Khiabani 12/31/2015 #7

我遇到了同样的问题,WebBrowser 使用的是旧版本的 IE,通过一些谷歌搜索,我遇到了以下代码,这些代码对注册表进行了更改,并使 WebBrowser 尽可能使用最新的 IE 版本:

 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;
        }
    } 

你只需要创建一个类并将这段代码放入其中,然后在程序启动时运行以下代码:

 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

您可以像这样使用它:

If Not WBEmulator.IsBrowserEmulationSet() Then
    WBEmulator.SetBrowserEmulationVersion()
End If

评论

1赞 David 7/14/2016
翻译成 Python(在 IronPython 应用程序上工作),它运行良好。谢谢!
1赞 cymorg 4/24/2019
这太棒了,但是是否可以重置仿真版本?似乎该版本只能在WinForms应用程序中设置一次。虽然可以让它看起来被重置,但效果是,一旦在注册表中设置和重置,它就不会在 WinForms 应用程序中使用新的注册表值重新读取。
1赞 Ashkan Mobayen Khiabani 6/10/2019
@DarrenMB据我所知,它使用IE11
1赞 Mark 11/13/2019
谢谢。是一个很好的解决方案,使 Web 浏览器控制变得更好。
1赞 Chris Raisin 2/9/2021
此外,由于 Edge 现在是 Windows 中的标准浏览器,我建议在“如果 ieVersion >= 11 Then”之后的行......从:emulationCode = BrowserEmulationVersion.Version11 更改为 emulationCode = BrowserEmulationVersion.Version11Edge
30赞 Rahul 5/11/2018 #8

2020年7月更新

基于 Chromium 的 WebView 2 由 Microsoft 发布。现在,您可以将新的 Chromium Edge 浏览器嵌入到 .NET 应用程序中。

更新 2018 5 月

如果你的目标是在 Windows 10 或更高版本上运行的应用程序,那么现在你可以使用 Windows 社区工具包将 Edge 浏览器嵌入到 .NET 应用程序中。

WPF 示例:

  1. 安装 Windows 社区工具包 Nuget 包

    Install-Package Microsoft.Toolkit.Win32.UI.Controls
    
  2. XAML 代码

    <Window
        x:Class="WebViewTest.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:WPF="clr-namespace:Microsoft.Toolkit.Win32.UI.Controls.WPF;assembly=Microsoft.Toolkit.Win32.UI.Controls"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:local="clr-namespace:WebViewTest"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        Title="MainWindow"
        Width="800"
        Height="450"
        mc:Ignorable="d">
        <Grid>
            <WPF:WebView x:Name="wvc" />
        </Grid>
    </Window>
    
  3. CS 代码:

    public partial class MainWindow : Window
    {
      public MainWindow()
      {
        InitializeComponent();
    
        // You can also use the Source property here or in the WPF designer
        wvc.Navigate(new Uri("https://www.microsoft.com"));
      }
    }
    

WinForms 示例:

public partial class Form1 : Form
{
  public Form1()
  {
    InitializeComponent();

    // You can also use the Source property here or in the designer
    webView1.Navigate(new Uri("https://www.microsoft.com"));
  }
}

有关详细信息,请参阅此链接

评论

0赞 Deniz 2/14/2020
我确实安装了Nuget包,但它不起作用。还是ty。
1赞 Vlada 7/31/2020
WebView2 在当前状态下不适用于 C#
0赞 Rahul 7/31/2020
@Viada 根据 Microsoft 文档,您可以: learn.microsoft.com/en-us/microsoft-edge/webview2/...
2赞 Xam 8/1/2020
与旧的 WebBrowser 相比,WebView 控件是垃圾。它甚至不能显示pdf文件。
1赞 camino 12/26/2021
它根本不起作用