CefSharp 初用遇到的一些问题及解决方法

摘要:
主要问题是WebBrowser控件的UserAgent。版本过低或不支持此浏览器。源代码和执行文件已下载,带有错误提示的网站也正常显示。如果要修改的项目属性设置为x86作为编译目标,则应用程序将启动并退出,并显示错误。否则,当调用devtools时,将报告错误并且无法打开。您需要封装WebView(由CefSharp.WinForms.dll实现的浏览器类)。

    之前用WebBrowser,打开网页很卡,但因为并是太要求速度和体验,所以可以显示html就可以了。但是,现在要求显示速度,最主要问题是WebBrowser控件的UserAgent,其实并不完全是IE(之前大家都以为是),而是7.0,有一个办法可以在注册表中修改,修改为10.0,但是在测试网站,如:http://whatsmyua.com/  ,显示的是WebBrowser,而不是IE10。应该是这个问题,使很多网站都会提示,版本太低或不支持这款浏览器,这样没办法正常显示,虽然只有少部分,但遇到关键的网站干着急。

     找到CefSharp这个开发包,下载了源码和执行文件,速度比WebBrowser要快不卡了,而且有错误提示的网站也都正常显示了。但在分析源码时,遇到一些问题,由于独自研究耽搁一天多,以后也可能还会遇到,在此总结下。

     源码分为几个工程,有WinForm和Wpf两种演示,虽然我很喜也更善长Wpf,但因为软件效率的原因,还是只看WinForm,有支持的VC托管工程CefSharp和CefSharp.WinForms,另外有mvc方式的示例c#工程CefSharp.Example,执行文件依赖的是CefSharp.dll和CefSharp.WinForms.dll。另外,需要加入icudt.dll和libcef.dll,生成操作设置无,输出设为新复制,因为CefSharp.dll需要,否则将会报错。另外,CefSharp是x86编辑,需要修改使用的工程属性在编译目标设置为x86,否则有编译警告。

    将locales及其下所有都设置为输出,里面有个en-US.pak文件,如没有,则应用程序会启动显示错误退出。

    再将devtools_resources.pak 设置为输出,否则调用devtools时将报错不能打开。(常见问题官网解释)

    还有一个非常奇怪没能解决的问题,想封装WebView(CefSharp.WinForms.dll实现的浏览器类),到一个UserControl,但如果拖放这个控件到其它控件上或窗体上,则会报文件找不到CefSharp.dll或其依赖项,Reflector也没能找到到底是缺了什么。只要是在userControl引用WebView的实例就会报错,只能使用反射建立的办法迂回建立了。谁知道原因和办法,请发给我:)

    上面说的CefSharp.Example定义了一个绕的方案的解决控制与视图间的关联,这样真的耦合低么,但我的需求很简单,就是按WebBrowser的设计封装一个相同方法的类,用来替换它。但后来发现,确实有必要,因为Cef的结构很繁杂,可能是功能多的原因吧。

    IWebBrowser 有XXXXXHandle属性,用来控制浏览器的运行。之前我需要的不打开新窗口,只转向,需要实现ILifeSpanHandler,然后返回true证明处理了。

    Cef分为系统初始化和设置参数,还有BrowserView的参数设置。更多的控制需要详看CefSharp.Example,我仔细看过,没什么不理解处。至于前面的VC工程实在没有细看的耐心了,暂时不需要。

c++和c#联合编成   使用webBrowser在网页中插入js脚本并执行   一个ISchemeHandler例子   用javascript获取图片颜色

免责声明:文章转载自《CefSharp 初用遇到的一些问题及解决方法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇kudu安装部署css cross-fade()实现背景图像半透明效果下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

使用idea搭建Scala 项目

主要内容 Intellij IDEA开发环境简介 Intellij IDEA Scala开发环境搭建 Intellij IDEA常见问题及解决方案 Intellij IDEA常用快捷键 1. Intellij IDEA开发环境简介 具体介绍请参见:http://baike.baidu.com/link?url=SBY93H3SPkmcmIOmZ8H6...

2020第44周Windows文件系统不区分大小写

由于Windows文件系统不区分大小写,所以你不能通过大小写来区分文件名或文件夹名,比如你在资源管理器中新建一个A.txt文件,想再建个a.txt时会提示你重名并自动重命名。这在Git操作时可能会遇到问题,比如你代码库里文件或文件夹修改了名称,默认Git认为是没变的,如果单纯让Git在仓库中区分大小写会产生两份文件并且无法在Windows系统中观察到),...

Nwjs简单配置

1.创建一个工程,配置一个  package.json 文件 { "name": "application-name", "version": "0.0.1", "main":"index.html" }   上面的"main"对应自己创建的html文件,作为NWjs的入口 2.配置工程的环境:(1)下载  nwjs-sdk-v0.18.6-...

三年了

  分手三年了。分的时候我感觉我挺干脆利落的,可是不知道为什么这三年来总是会时不时地想起他来。其实只谈了三个月,我应该早就放下了啊。可能是因为当初是我没有珍惜没有尊重那份感情,所以心里一直有愧疚。三年来每当想起都会想亲口跟他正式地说句“对不起”,可是没有勇气,没有勇气面对他。也不知道到底怎样做才能了断了我这时不时的想起,不想再想起,因为这复杂的心情实在太难...

最短路径之(迪杰斯特拉)Dijkstra算法(及其改进:BF算法,SPFA算法),(弗洛伊德)Floyd算法

最短路径 最短路径问题是图的一个经典问题,常用的求最短路径的方法有 (迪杰斯特拉)Dijkstra算法,(弗洛伊德)Floyd算法。 Dijkstra算法用于求单源点最短路径问题,复杂度为O(n2),而Floyd算法用于求对每一对顶点之间的最短路问题(采用枚举法,枚举所有可能),复杂度为O(n3)。 一、Dijkstra算法: 迪杰斯特拉提出了一个按...

动态规划法-01背包问题

一 几个概念: 最优化问题:有n个输入,它的解由这n个输入的一个子集组成,这个子集必须满足某些事先给定的条件,这些条件称为约束条件,满足约束条件的解称为问题的可行解。满足约束条件的可行解可能不止一个,为了衡量这些可行解的优劣,事先给出一定的标准,这些标准通常以函数的形式给出,这些标准函数称为目标函数,使目标函数取得极值的可行解成为最优解,这类问题称为最优...