是否有相对简单的方法将现代浏览器插入到。net应用程序中?

据我所知,WebBrowser控件是IE的包装器,这不会是一个问题,除了它看起来像一个非常旧的IE版本,所有这些都涉及CSS的混乱,潜在的安全风险(如果渲染引擎没有打补丁,我真的能指望无数的缓冲区溢出问题得到解决吗?)和其他问题。

我使用的是Visual Studio c#(快速版-在这里有什么不同吗?)

我想在我的应用程序中集成一个好的网络浏览器。在某些情况下,我只是用它来处理用户注册过程,界面与我的网站的一些功能和其他事情的顺序,但我有另一个应用程序在脑海中,将需要更多的错误…控制。

我需要:

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

我在考虑Chrome,因为它是基于BSD许可的,但我也会同样喜欢最新版本的IE。

尽可能地,我想让事情简单化。最好的情况是,如果有人可以修补现有的WebBrowser控件,它已经做了我所需要的70%,但我不认为这是可能的。

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

我愿意听取建议


当前回答

如果你不知道的话,Chrome使用Webkit(一个分支),Safari也使用。下面是一些类似的问题:

用c#嵌入Webkit 用c#嵌入Gecko (Firefox引擎)

webkit并不像另一个答案所说的那样好,一个版本不再工作(谷歌代码版本),Mono版本是实验性的。如果有人努力为它做一个像样的。net包装就好了,但似乎没有人想这么做——考虑到它现在支持HTML5和许多IE(8)引擎所缺乏的其他特性,这是令人惊讶的。

更新(2014)

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

我想这是Origin在《战地3》中使用的浏览器。

更新(2016)

现在有DotnetBrowser,一个商业替代Awesomium。它是以铬为基础的。

其他回答

如果你不知道的话,Chrome使用Webkit(一个分支),Safari也使用。下面是一些类似的问题:

用c#嵌入Webkit 用c#嵌入Gecko (Firefox引擎)

webkit并不像另一个答案所说的那样好,一个版本不再工作(谷歌代码版本),Mono版本是实验性的。如果有人努力为它做一个像样的。net包装就好了,但似乎没有人想这么做——考虑到它现在支持HTML5和许多IE(8)引擎所缺乏的其他特性,这是令人惊讶的。

更新(2014)

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

我想这是Origin在《战地3》中使用的浏览器。

更新(2016)

现在有DotnetBrowser,一个商业替代Awesomium。它是以铬为基础的。

签出CefSharp . net绑定,这是我不久前开始的一个项目,幸运的是它得到了社区的支持,并变成了一些很棒的东西。

该项目包含了Chromium嵌入式框架,并已在许多主要项目中使用,包括Rdio的Windows客户端,Facebook Messenger for Windows和Github for Windows。

它为WPF和Winforms提供了浏览器控件,还有大量的特性和扩展点。基于铬,它的速度也非常快。

从NuGet: dotnet中添加CefSharp包。Wpf或dotnet添加包CefSharp。WinForms

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

BSD Licensed

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

所以只要写:

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

在文档头部的某个地方。

显然,如果它不是你的文档,这不会有帮助-尽管我个人认为这是一个安全漏洞,如果你阅读的页面不是通过WebBrowser控件创建的-为什么不使用web浏览器!

您可以使用注册表来设置IE版本的web浏览器控件。 转到: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

2020年7月更新

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

2018年5月更新

如果您希望应用程序在Windows 10或更高版本上运行,那么现在可以使用Windows Community Toolkit将Edge浏览器嵌入到. net应用程序中。

WPF示例:

Install Windows Community Toolkit Nuget Package Install-Package Microsoft.Toolkit.Win32.UI.Controls XAML Code <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> CS Code: 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"));
  }
}

请参考此链接了解更多信息。