将webkit内核封装为duilib的浏览器控件

转载请说明出处,谢谢~~

         原本的duilib是自带浏览器控件的,但是使用了IE内核,我在做仿酷狗音乐播放器时,在右侧乐库要用到浏览器控件,而我使用自带的IE控件却发现了不少缺点,这也是duilib一直没有解决的,编程群里的朋友也反映IE控件不好用。而目前最常用的浏览器内核一个是IE内核,另一个是webkit内核。

            先简单介绍一下这个webkit内核
            WebKit 是一个开源浏览器引擎,与之相对应的引擎有Gecko(Mozilla
Firefox 等使用)和Trident(也称MSHTMLIE 使用)。同时WebKit
也是苹果Mac OS X 系统引擎框架版本的名称,主要用于SafariDashboardMail 和其他一些Mac
OS X
 程序。WebKit 前身是 KDE 小组的 KHTML,WebKit 所包含的 WebCore 排版引擎
JSCore 引擎来自于 KDE 的 KHTML 和
KJS,当年苹果比较了 Gecko 和 KHTML 后,仍然选择了后者,就因为它拥有清晰的源码结构、极快的渲染速度。Apple
KHTML 发扬光大,推出了装备 KHTML 改进型 WebKit 引擎的浏览器 Safari。
             WebKit 内核在手机上的应用也十分广泛,例如 Google 的手机Android
Apple 的 iPhone, Nokia’s Series 60 browser 等所使用的 Browser 内核引擎,都是基于 WebKit。
WebKit是开源的Web浏览器引擎,苹果的Safari、谷歌的Chrome浏览器都是基于这个框架来开发的。WebKit 还支持移动设备和手机,包括iPhone和Android手机都是使用WebKit做为浏览器的核心。 
            可以看到webkit的前景非常不错,谷歌和苹果的各个产品,包括现在流行的安卓和IOS系统,他们的浏览器都才用webkit内核,大有取代IE内核的意思。而且webkit是开源免费的!
            昨天我在网上搜索了webkit的相关产品,先是著名的cef,下载下来以后发现他编译后40M大,功能很强大,当然用起来比较复杂,查阅了相关资料,尝试封装了一下,但是发现难度较大。而且40M对于我这样只为了显示网页的需求来说太大了。如果是为了专门制作个浏览器,那么使用cef是很不错的。
            然后我下载EAWebkit,这个内核是基于webkit的精简封装,编译后只有3M大,用起来简单,但是和群里的朋友交流后得知这个内核不稳定,还存在较多bug,所以我也果断放弃了。
            最后四方打听,知道了这个wke内核,这个内核是国人BlzFans发布的开源免费内核,一个相当好的代码,在此先感谢BlzFans的工作!
            这个wke内核是为了在3D游戏中嵌入网页和flash而开发的,支持最新的HTML5和CSS3技术,兼容性和速度都不错。
            今天花了一上午把这个内核封装为了duilib的浏览器控件,效果如下。 

            封装起来还是挺顺利的,有自带的win32demo,了解了他的工作过程,使用这个内核很简单,一个头文件,一个库文件,一个dll,只有这个3个文件。我在duilib里,仿照了CRichEditUI的封装过程。制作了CWkeWebkitUI控件作为浏览器控件。这个CWkeWebkitU控件继承了CControlUI控件,来更好的兼容duilib,然后在控件内部我封装了CWkeWebkitWnd类,CWkeWebkitU控件初始化时会建立CWkeWebkitWnd类,这个CWkeWebkitWnd类会使用Createwindow函数先建立一个子窗体,并且使用了WS_VISIBLE
| WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN样式,WS_CHILD让这个新建的窗体成为主窗体的子窗体,然后添加WS_CLIPSIBLINGS | WS_CLIPCHILDREN样式,这两个样式很关键,他可以让主窗体刷新时不去刷新子窗体,否则不加这个样式,就会因为主窗体频繁的刷新导致浏览器控件的卡顿。解决了核心问题,然后就是处理webkit内核的消息,仿照了原代的demo,我把各个消息处理后,就封装好了这个控件,并且增加了几个简单的接口来方便外部的调用。
            结束,休息一下~~

2014.7.25  15:50  Redrain

时间: 2024-09-30 18:40:15

将webkit内核封装为duilib的浏览器控件的相关文章

给Webkit内核的浏览器控件增加互交功能

转载请说明出处,谢谢~~       昨天封装了基于webkit的wke浏览器内核,做成了duilib的浏览器控件,实现了浏览功能,但是单单的浏览功能还不满足需求,在我的仿酷狗项目中乐库的功能需要与浏览器互交.     大家知道在使用酷狗浏览器时,右侧的乐库,当我们选中了某个音乐,这时酷狗就会去缓冲并且播放响应的歌曲.本身浏览器与c++的窗体是不会互交的.而酷狗使用的IE浏览器内核,在c++代码中对CHtmlView类进行继承和重写,并完成IDispatchEx接口的相关工作后,就可以开启IE内

基于wke封装的duilib的webkit浏览器控件,可以c++与js互交,源码及demo下载地址

转载请说明原出处,谢谢~~        前些日子用wke内核封装了duilib的webkit浏览器控件,好多群里朋友私聊我希望可以我公布源码,今天把这个控件的源码和使用demo公布.其实这个控件封装起来没什么难度,我只是按照原来作者的demo,把相应的消息封装成duilib对应的.        在此首先要感谢wke内核的作者BlzFans以及soui2界面库的作者flyhigh,BlzFans精简了webkit内核后封装为wke并公布了源码,flyhigh对wke进行处理让他更容易移植到du

duilib 的IE浏览器控件去边框和去滚动条的代码

转载请说明原出处,谢谢~~         近些天在duilib群里经常有朋友问起,怎么让duilib的IE控件可以去边框,去滚动条的问题,或者是如何去控件IE控件的行为.为了避免重复的回答,我就写一篇博文,把处理方法说明一下.         duilib中有Webbrowser控件,是继承ActivexUI控件后针对IE进行的封装,使用IE控件的话就用他了.这个控件留了一个接口名为SetWebBrowserEventHandler,这个函数用了指定一个事件处理器,来控制IE的行为.而这个函数

c#-C# 用除了webbrowser的浏览器控件获取Html元素并转化成相应对象。

问题描述 C# 用除了webbrowser的浏览器控件获取Html元素并转化成相应对象. C# 用除了webbrowser的浏览器(如webkit,Cefsharp,cefglue)控件获取 img Html元素并转化成对应的Image对象 解决方案 最简单通用的做法是借助剪贴板.不管什么内核,只要你的浏览器支持选中和复制,也不管什么格式,C#那里都可以获得. "通过httpwebrequest对象发起请求获取到html",我猜测lz要得到验证码,如果是那样,再发请求会导致验证码刷新.

open-webkit-sharp的webKitBrowser浏览器控件,如何实现js脚本调用c#的方法

问题描述 如题,我用WebKit.NET的封装接口软件open-webkit-sharp,在c#的WinForm窗体内嵌入webKitBrowser浏览器控件,在webKitBrowser内打开htm的页面,页面上内有按钮,我想点击按钮时,用js脚本调用c#的方法函数.若使用c#自带的WebBroeser控件内,在htm页面用js脚本调用c#的方法函数,用window.external可正常调用c#的方法函数.但open-webkit-sharp的webKitBrowser内,window.ex

将 Java 小程序迁移到 Microsoft J# 浏览器控件

程序|控件|浏览器 Visual J# .NET 小组 Microsoft Corporation 摘要:通过 Microsoft J# 浏览器控件,开发人员可以将所编写的在 Java 虚拟机上运行的 Java 小程序迁移到 .NET 框架.本文向开发人员介绍 J# 浏览器控件,并说明将 Java 小程序迁移到 .NET 框架的步骤.本文还讨论了其他一些主题,如 J# 浏览器控件的安全性和调试,以及当前版本中不受支持的功能. 下载 HTML 小程序到对象标记转换器 (95KB) 本文假设开发人员

Win8系统无法打开网页提示”浏览器控件不兼容“解决办法

  Win8系统无法打开网页提示"浏览器控件不兼容"解决办法: 1.进入Win8系统,然后,使用鼠标双击要浏览的图标即可将浏览器打开; 2.在Win8系统窗口右上角处,点击工具按钮,再选择"Internet选项",接着在窗口上点击高级选项卡; 3.在Win8系统窗口高级选项卡下,点击"启动增强保护模式",然后使用鼠标将选英方框内的勾取消掉,并在窗口右下角点击"确定"按钮保存,即可解决浏览器无法显示故障; 4.返回Win8系统浏

求教一个浏览器控件的问题,谢谢

问题描述 浏览器控件打开网页时,会有两个动作1.获取内容到本地,2.如果里面有自动get或post,会有数据提交出去我想实现一个事就是,这个控件在获取内容到本地时,用本地网络get或者post数据出去时,采用代理ip可行吗?

duilib修复ActiveXUI控件bug,以支持flash透明动态背景

转载请说明原出处,谢谢~~           昨天在QQ控件里和同学说起QQ2013登陆窗体的开发,从界面角度考虑,单单一个登陆界面是很容易做出来的.腾讯公司为了防止各种盗号行为可谓煞费苦心,QQ2013采用了动态背景就是为了防止界面型盗号木马,这种盗号木马做起来很简单,容易骗过很多电脑小白.而采用动态背景后就加大了这种木马的开发难度.           在Duiengine界面库中,已经有高手做出来一个高仿QQ界面的Demo.其中的登陆窗体只要使用flash做背景就可以了.在duilib中