ISchemeHandlerFactory只有一个方法,就是Create,创建一个IResourceHandler实例

IResourceHandler用于定制资源处理器,方法有:

1. Cancel,取消处理请求,就是不请求

2. GetResponseHeaders

3. Open, 打开响应头的流

4. Read,读取Response数据

5. ReadResponse, 读取Response数据

6. Skip

ResourceHandler, 是IResourceHandler的默认实现,有多个很有用的静态方法。一般情况下够用了。

 

官方使用说明:

https://github.com/cefsharp/CefSharp/wiki/General-Usage

加载本地的html/css/js文件:

https://stackoverflow.com/questions/52338368/loading-local-html-css-js-files-with-cefsharp-v65

从.net中调用javascript:

https://github.com/cefsharp/CefSharp/wiki/General-Usage#1-how-do-you-call-a-javascript-method-from-net

从javascript中调用.net

https://stackoverflow.com/questions/23425059/call-net-from-javascript-in-cefsharp-1-wpf

个人写的加载嵌入资源的blog:

https://thechriskent.com/2014/05/12/use-embedded-resources-in-cefsharp/

一个

https://stackoverflow.com/questions/28697613/working-with-locally-built-web-page-in-cefsharp

ChromiumWebBrowser.LoadString(string html, string url);

的例子.

从winform发起POST web api (没有答案).

https://stackoverflow.com/questions/53405575/cefsharp-make-a-post-web-api-call-win-forms-c-sharp

直接加载本地磁盘文件:

https://github.com/cefsharp/CefSharp/blob/cefsharp/63/CefSharp.Example/CefSharpSchemeHandlerFactory.cs#L77

了解一下ResourceHandler.FromFilePath函数.

 

执行javascript:

https://stackoverflow.com/questions/31155779/cefsharp-execute-javascript

nuget安装了75.1.143 wpf版本, 安装之后需要重启才能看到cef相关的引用.

需要注意(至少4个文件在安装包里面):

libcef.dll

icudtl.dat

CefSharp.dll

CefSharp.Wpf.dll

cefsharp可以截获url, LoadHtml(string, url), 第一个是html字符串, 第二个是html有可能往真正的url发ajax请求的,这就意味着cefsharp可以截获从url带回来的html, 而用你提供的html来渲染, 比如, 你想做个假的baidu主页, 真是脑洞大开啊

https://stackoverflow.com/questions/27659086/cefsharp-loadhtml

最简单实用的一个视频:

https://www.youtube.com/watch?v=NTlErRwyYRA

如果没有显示调用Cef.Initialize, CefSharp会自动为你调用, 是以默认的配置.

1. CefSharp.BindObjectAsync在js中调用, 绑定一个对象
2. BindObjectAsync会返回一个Promise, 只有Promise解析成功后, 对象才可用, 但是例子中没有
2.1 实际上用await等到BindObjectAsync执行完成就可以用了。不用对返回的Promise进行处理了。
2. 上面函数返回一个Promise, 在C#中可以看到
3. 绑定的对象只存在全局上下文, 就是说附着在window对象的属性上面
4. 绑定的所有方法都是非阻塞的, 都会返回一个标准的JavaScript Promise, 用awaited等待
4. 如果不带参数调用BindObjectAsync, 那所有注册的对象都会被绑定
4.1 但是命名绑定会更有可读性。因为维护代码的人可以看到描述性的文字, 借以猜到代码的意义

第一步: 定义绑定对象
https://github.com/cefsharp/CefSharp/wiki/General-Usage#3-how-do-you-expose-a-net-class-to-javascript
第二部: 注册绑定对象
JavaScriptObjectRepository, 二种方法, 一种是事先绑定, 一种是实时绑定
第三步: 从js中调用绑定对象的函数

 

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐