是否有相对简单的方法将现代浏览器插入到。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
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"));
}
}
请参考此链接了解更多信息。