有没有相对简单的方法将现代浏览器插入.NET应用程序?
据我所知, WebBrowser
控件是 IE 的包装器,除了它看起来像是 IE 的一个非常旧的版本之外不会有问题,所有这些都需要CSS搞砸,潜在的安全性风险(如果渲染引擎没有打补丁,我真的可以期待修复多个缓冲区溢出问题吗?)和其他问题 .
我正在使用Visual Studio C#(快速版 - 它在这里有什么不同吗?)
我想在我的应用程序中集成一个好的Web浏览器 . 在某些情况下,我只是用它来处理用户注册过程,与我的网站的一些功能和该命令的其他东西的接口,但我有另一个应用程序,需要更多错误...控制 .
我需要:
-
可以集成到我的应用程序窗口内的浏览器(不是单独的窗口)
-
对CSS,js和其他网络技术的良好支持,与任何现代浏览器相同
-
基本浏览器功能,如"navigate","back","reload" ......
-
自由访问页面代码和输出 .
我正在考虑Chrome,因为它属于BSD许可证,但我会对最新版本的IE感到满意 .
尽可能地,我想保持简单 . 最好的情况是,如果一个人可以修补现有的 WebBrowser
控制,这已经占我所需要的大约70%,但我不可能 .
我找到了一个用于Mozilla的ActiveX控件(http://www.iol.ie/~locka/mozilla/control.htm),但看起来它不一定是一个改进 .
我愿意接受建议
20 回答
查看GeckoFX控件 .
如果您不知道,Chrome会使用(一个分支)Webkit,这也是Safari使用的 . 这里有几个相同的问题:
Embedding Webkit with C#
Embedding Gecko (Firefox engine) with C#
webkit一个不是很好,因为其他答案说明,一个版本不再有效(谷歌代码一个)和Mono一个是实验性的 . 如果有人努力为它制作一个体面的.NET包装器会很好,但这不是任何人似乎想做的事情 - 这是令人惊讶的,因为它现在支持HTML5以及IE的许多其他功能(8 )引擎缺乏 .
Update (2014)
有一个新的双许可项目,允许您将Chrome嵌入到名为Awesomium的.NET应用程序中 . 它附带了一个.NET api,但需要相当多的黑客进行渲染(示例将浏览器窗口绘制到缓冲区,将缓冲区绘制为图像并刷新计时器) .
我认为这是Origin在战地3中使用的浏览器 .
Update (2016)
现在有DotnetBrowser,是Awesomium的商业替代品 . 它基于Chromium .
Geckofx和Webkit.net最初都很有希望,但是随着Internet浏览器的改进,它们并没有跟上Firefox和Chrome的最新状态,Webbrowser控件也是如此,尽管默认情况下它的行为类似于IE7而不管IE版本是什么但是可以通过进入注册表并将其更改为允许HTML5的IE9来修复 .
UPDATE 2018 MAY
如果您的目标是在Windows 10上运行应用程序,那么现在可以使用Windows Community Toolkit将Edge浏览器嵌入到您的.net应用程序中 .
WPF Example:
1)安装Windows社区工具包Nuget包
2)XAML代码
3)CS代码:
WinForms Example:
有关更多信息,请参阅link .
我已经尝试了所有的浏览器 . 不幸的是,在所有情况下真正为我工作的唯一一个是EO.Browser . 我希望我能选择一个免费的解决方案,但我最终得到了EO.Browser . 它非常昂贵,但维护得很好 .
我几天前一直在测试C#Web浏览器组件的替代品,这是我的列表:
1. Using newer IE versions 8,9:
Web Browser component is IE7 not IE8? How to change this?
优点:
让它运行不需要太多工作
如果IE9支持一些HTML5 / CSS3,如果是IE10则全部
缺点:
这不需要太多工作,你可以获得一些HTML5和CSS3支持虽然IE9缺乏一些最好的CSS3和HTML5功能 . 但我相信你可以让IE10以同样的方式运行 . 问题是目标系统必须安装IE10,并且由于仍然在Windows 7上进行预览,我建议不要使用它 .
2. OpenWebKitSharp
OpenWebKitSharp是基于WebKit.NET 0.5项目的webkit引擎的.net包装器 . WebKit是Chrome / Safari使用的布局引擎
优点:
积极开发
HTML5 / CSS3支持
缺点:
许多功能未实现
不支持x64(必须为x86构建应用程序)
虽然很多功能还没有实现,OpenWebKit还是相当不错的,我在使用visual studio时遇到了一些问题,它在这里抛出空对象引用,然后在设计模式下,有一些js问题 . 每个人使用它几乎会立即注意到js警报什么都不做 . 像mouseup,mousedown等等事件不起作用,js拖放是有缺陷的等等..
我在安装它时也遇到了一些困难,因为它需要安装特定版本的VC可再发行组件,所以在异常后我查看了事件日志,找到了VC的版本并安装了它 .
3. GeckoFX
优点:
适用于单声道
积极开发
HTML5 / CSS3支持
缺点:
GeckoFX是一个跨平台的Webrowser控件,用于嵌入到WinForms应用程序中 . 这可以在Windows上使用.NET,在Linux上使用mono . Gecko是Firefox使用的布局引擎 .
我碰到了GeckoFX没有积极开发的一些信息,这是不正确的,当然它总是一两个版本落后于Firefox,但这是正常的,我对活动和控件本身印象非常深刻 . 它可以完成我需要的一切,但是我需要一些时间才能让它运行,这是一个让它运行的小教程:
下载GeckoFx-Windows-16.0-0.2,在这里你可以检查一下是否有更新GeckoFX
添加对两个下载的dll的引用
由于GeckoFX是包装器,你需要XulRunner,转到Version List看看你需要哪一个
现在我们知道我们需要哪个版本的XulRunner,我们转到Mozilla XulRunner releases,转到版本文件夹 - >运行时 - > xulrunner-(your_version).en-US.win32.zip,在我们的例子中xulrunner-16.0.en-US.win32.zip
解压缩所有内容并将所有文件复制到bin \ Debug(如果项目设置为release,则发布)
转到您的表单的视觉工作室设计器,转到工具箱,右键单击里面 - >选择项目 - >浏览 - >查找下载的GeckoFX winforms dll文件 - >确定
现在你应该有新的控件GeckoWebBrowser
如果您真的必须使用Chrome,请查看这款名为Awesomium的产品,它对于非商业项目是免费的,但许可证是商业用的几千美元 .
Update 2016:
我可以建议另外3个选项:
1. BrowseEmAll.Cef
一个.Net组件,可用于将 Chrome engine 集成到.Net应用程序中 . 基于CefGlue,但对最新Chrome版本的更新速度要快一些 . 还有一个 commercial support 选项可供一些人派上用场 . 当然组件本身是 open source .
2. BrowseEmAll.Gecko
另一个.Net组件,可用于将 Firefox engine 集成到.Net应用程序中 . 这是基于Geckofx,但与当前版本的Geckofx不同,这将适用于Firefox的正常发布版本 . 要使用Geckofx,您需要自己构建Firefox . 同样 commercial support 可用,但组件本身完全 open source .
3. BrowseEmAll Core API
需要.Net应用程序中的所有不同浏览器?哪个BrowseEmAll Core API可以 integrate Chrome, Firefox, Webkit and Internet Explorer 进入您的应用程序 . 这是一个 commercial product 虽然如此警告 .
(完全披露:我为这家公司工作,所以我用一粒盐说我拿的一切)
EO.BrowserControl快速简便 . 它具有Chrome浏览器引擎,可与任何版本的.NET配合使用
https://visualstudiogallery.msdn.microsoft.com/fcee0646-42e7-484f-b22e-f8b2ace55dd7
注意:这是一个商业许可的产品,我没有考虑到这一点 . 在尝试了各种其他事情后,我最终选择了这个 .
2016年更新:
对我来说,IE唯一可靠,维护的浏览器替代方案是EO.WebBrowser . 我花了几天时间尝试其他人 . 他们所有人都有一些问题在某些时候阻止了我 .
结帐 CefSharp .Net绑定,我开始了一段时间的项目,谢天谢地被社区接收并变成了一些美妙的东西 .
该项目包含了Chromium Embedded Framework,并已用于许多重大项目,包括Rdio的Windows客户端,Facebook的Windows Messenger和Windows的Github .
它具有WPF和Winforms的浏览器控件,并具有大量功能和扩展点 . 基于Chromium,它的速度也非常快 .
从NuGet获取它:
Install-Package CefSharp.Wpf
或Install-Package CefSharp.WinForms
查看示例并提出您的想法/反馈/请求:https://github.com/cefsharp/CefSharp
BSD许可
您可以使用注册表为webbrowser控件设置IE版本 . 转至:HKLM \ SOFTWARE \ Microsoft \ Internet Explorer \ Main \ FeatureControl \ FEATURE_BROWSER_EMULATION并添加"yourApplicationName.exe",其值为browser_emulation要查看browser_emulation的值,请参阅链接:http://msdn.microsoft.com/en-us/library/ee330730%28VS.85%29.aspx#browser_emulation
我知道这不是一个'替换'WebBrowser控件,但是我在显示一个使用BootStrap 3进行布局等的页面时遇到了一些糟糕的渲染问题,然后我发现了一个帖子,建议我使用以下内容 . 显然它是特定于IE并告诉它使用客户端机器上发现的最新变体进行渲染(所以它不会使用IE7,因为我认为是默认的)
所以就这样说:
位于文档头部的某处 .
如果当然不是你的文件,那么这个显然不会有所帮助(虽然我个人认为如果你正在阅读不是由你自己通过webbrowser控件创建的页面,这是一个安全漏洞 - 为什么不只是使用webbrowser!)
祝好运 .
如果您正在寻找一个不错的基于IE的控件 - 请查看:http://code.google.com/p/csexwb2/
我在 生产环境 产品中使用过它 . 这是非常好的,有很好的演示虽然现在似乎没有像过去那样得到维护 .
我使用过GeckoFX,它非常适合我 . 它使用Firefox引擎 . 我曾经遇到的唯一警告是,它在文档实际完全加载之前发出一次“DocumentLoaded”事件...我认为它在加载HTML时会发出一个,然后在所有加载时发出另一个图像和东西都加载了 . 我通过简单地忽略第一个来修复它,到目前为止它一直很好地工作 .
你可以在这里找到它:https://bitbucket.org/geckofx/
像大多数体面的图书馆一样,它是开源的 .
我尝试了一些Webkit变体,但根据我的经验,没有什么比OpenWebkitSharp具有的进步更好 . 喜欢它喜欢它.. HTML5和CSS3分数尽可能接近谷歌Chrome . 非常好的API和事件模型 . 如果您发现"not implemented" API很可能是因为它们未在Webkit中实现 . 其他一切都很棒 .
看一下DotNetBrowser库 . 它提供了基于Chromium的WPF和WinForms浏览器控件,它们很容易嵌入到.NET应用程序中 . 它支持所有现代Web标准,包括HTML5,CSS3和JavaScript . 呈现的页面与Google Chrome中的内容完全相同 .
该库继承了Chromium的多进程架构 - 每个Web页面都在一个单独的Chromium进程中呈现,即使在插件崩溃或网页上发生任何其他意外错误之后,应用程序仍将继续工作 .
以下是DotNetBrowser提供的一些其他有用功能:可以监听加载事件,处理网络活动,配置代理,模拟用户操作,使用cookie,访问和修改DOM,监听DOM事件,从.NET调用JavaScript反之亦然,在网页上使用网络摄像头和麦克风,设置基于WebRTC的通信,以及more .
查看API Reference了解更多详情 .
下面的代码片段演示了如何创建BrowserView,将其嵌入到表单中,以及如何加载URL:
运行上面的示例后,您将获得以下输出:
该图书馆是商业图书馆,但它可以免费用于开源和学术项目 . 商业许可证包括针对不同团队规模的支持包 . 也可以购买图书馆的源代码 .
除了自己的页面,该组件在Visual Studio Marketplace中以NuGet package和VSIX package的形式提供 .
我遇到了同样的问题,WebBrowser正在使用旧版本的IE,通过一些谷歌搜索我遇到了以下代码,它改变了注册表并使WebBrowser使用最新的IE版本:
您只需要创建一个类并将此代码放入其中,然后在程序启动时运行以下代码:
试试EO.WebBrowser . 它是全新的,基于最新版本的Chrome浏览器 . 关于它的最好的部分是它将所有内容打包在一个.NET dll中,因此它不仅非常易于使用和部署,而且同样的DLL支持32位和64位,因为它是.NET dll .
看一下Mono.WebBrowser控件 - 它将Gecko(由Firefox使用)或WebKit(由Safari使用)嵌入到WinForms中(不使用ActiveX) .
MozNet是一个.NET控件,以前基于或多或少被遗弃的GeckoFX控件,但是正在全面开发中,并且具有比GeckoFX更强大的功能 . 您可以在Se7en Soft网站上找到它 .