CefSharp 使用问题记录

31 篇文章 4 订阅

背景:

CEF : 是一个C/C++库,使用了google的chrome 开源内核WebKit引擎,可以允许开发者将网页嵌入CEF中进行展示

CefSharp:是一个基于CEF,使用C++/CLI进行二次开发封装,使.NET开发者可以使用C# 来控制CEF

CefSharp有Winform和WPF两个版本

 

1.网页打开速度问题:

使用了最简单的新建项目,打开网页明显感觉并没有chrome浏览器快,使用的是69.0版本

因为是使用的WPF项目,然后因为Cefsharp.WPF有一些不稳定性,所以选择了Cefsharp.Winform 。

在WPF控件中嵌入winform控件,所以需要用Winformhost 包一下。

但是发现打开网页的速度并不快,感觉也没有微软的Webbrowser快,本来使用的是49版本,因为要支持XP,后来升级了换成了69.0版本,但是依然速度没有起色。

今天又测试了下使用WPF版本,对比两个版本,发现并没有明显区别。

初步结论:cefsharp可能因为C++/CLI的转化层消耗了性能,因为直接用C++来调用CEF,明显速度是快上一些的

 

 

 

2.LINK : fatal error LNK1104: 无法打开文件“ucrtd.lib”

下载cefsharp63 准备编译,工程中项目几乎全是类库,只有CefSharp.WinForms.Example 和CefSharp.Wpf.Example 是windows应用

选中其中一个设为启动项,F5运行,哗啦啦报了一堆错,根本原因是cefsharp.core这个项目生成时报错了:LINK : fatal error LNK1104: 无法打开文件“ucrtd.lib”

这里可以点击LINK1104,会跳转到msdn,里面有详细的解释:

解决方案:

选中项目->右键->属性->常规 -->Windows SDK     改成当前系统的SDK版本,我这边是10.0.15063.0,重新生成即可

 

3.打开某些网站发现字体非常小,只有1px

一般网站都正常,就这个网站很特殊,字体很小,查看源代码,发现里面的元素都没有设定具体的大小和像素,只有small和large这种设定

把这个网站放到chrome和火狐、IE下都正常,只有在cefsharp下有问题,那么就是cefsharp的使用有问题

原因是locales文件夹中没有paks,或者 locales没有更新到对应的版本,这里我是paks还是49版本的,但是dll已经换成了69了
把locales下的paks更新下就好了

 

 

4.使用cefsharp 提示Abode flash  is out of date 

用的是cefsharp.winform 69版本

解决方案:

若安装了chrome,则在本地找到C:\Users\viruser.v-desktop\AppData\Local\Google\Chrome\User Data\PepperFlash\32.0.0.192

谷歌的本地chrome的配置,搜索下,最好是比较新的版本:

然后复制该文件pepflashplayer.dll

在项目根目录下新建一个flash文件夹,把dll文件拷贝到该目录下

代码修改如下,增加settings:

            var cefsetting = new CefSettings();
            cefsetting.CefCommandLineArgs.Add("ppapi-flash-path", @"flash\pepflashplayer.dll");
            cefsetting.CefCommandLineArgs.Add("ppapi-flash-version", "32.0.0.192");
            Cef.Initialize(cefsetting);

重新启动成功,ppapi-flash-version版本号可以在dll的详细信息里看到

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CefSharp是一个基于Chromium Embedded Framework(CEF)的.NET包装器,可以在.NET应用程序中嵌入Chromium浏览器。在CefSharp使用GetResourceHandler方法可以拦截浏览器请求并返回自定义的资源,例如本地文件、内存中的数据等。使用GetResourceHandler方法的步骤如下: 1. 创建一个实现IResourceHandler接口的类,该类将处理浏览器请求并返回自定义资源。 2. 在CefSharp的BrowserSettings中设置CustomResourceRequestHandler属性,该属性应指向实现IResourceRequestHandler接口的类。 3. 在实现的IResourceRequestHandler接口中重写GetResourceHandler方法,并在其中返回第1步中创建的IResourceHandler实例。 4. 在自定义的IResourceHandler实现中处理请求并返回资源数据。 以下是一个简单的示例代码,演示如何使用GetResourceHandler方法: ```csharp public class CustomResourceHandler : IResourceHandler { public bool ProcessRequestAsync(IRequest request, ICallback callback) { // 处理请求并返回资源数据 // ... } // 实现 IResourceHandler 接口的其他方法 // ... } public class CustomResourceRequestHandler : IResourceRequestHandler { public IResourceHandler GetResourceHandler(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request) { // 返回自定义的 IResourceHandler 实例 return new CustomResourceHandler(); } // 实现 IResourceRequestHandler 接口的其他方法 // ... } // 在初始化CefSharp浏览器之前设置CustomResourceRequestHandler属性 var settings = new BrowserSettings { CustomResourceRequestHandler = new CustomResourceRequestHandler() }; var browser = new ChromiumWebBrowser("about:blank", null, settings); ``` 在这个示例中,CustomResourceHandler类是自定义的资源处理程序,它实现了IResourceHandler接口来处理浏览器请求并返回资源数据。CustomResourceRequestHandler类是自定义的资源请求处理程序,它实现了IResourceRequestHandler接口,并在其中重写了GetResourceHandler方法来返回CustomResourceHandler实例。最后,在初始化ChromiumWebBrowser之前,将CustomResourceRequestHandler实例设置为BrowserSettings的CustomResourceRequestHandler属性即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值