分享源码
界面截图:
是否带模块:
纯源码
备注说明:
-
本帖最后由 宇智波·佐助 于 2016-3-21 10:03 编辑
《Hello WebKit》, 是完全面向对象的框架,所有的对浏览器的操作都在类中进行,所有的回调事件也在类中响应,总之一切皆为(类)对象 , 在这里请将《Hello WebKit》框架视作易语言 版的Cef框架,因为本身也是如此。
《Hello WebKit》框架运行环境下载: https://drive.google.com/file/d/0B8L3SgpHRzjtSzc2YXNHMFpjZnc/view?usp=sharing
《Hello WebKit》框架源代码:
Hello WebKit 1.0000.01.rar
(21.83 KB, 下载次数: 995)
《WebKit Browser》源代码:
WebKit Browser.rar
(14.12 KB, 下载次数: 1010)
《浏览器模版》源代码:
浏览器模版:
浏览器模版.rar
(10.96 KB, 下载次数: 1296)
《Hello WebKit》互助群: 89456201
这里为大家准备一些关于WebKit 和 Cef 的学习资料,方便掌握:
Cef3学习笔记一: http://www,cnblogs,com/haippy/archive/2013/06/10/3131373,html
Cef3学习笔记二: http://www,cnblogs,com/haippy/archive/2013/06/10/3131354,html
Cef3学习笔记三: http://www,cnblogs,com/haippy/archive/2013/06/10/3131253,html
--------------------------------------------------------------------------------------------------------------------------------------------------------
使用《Hello WebKit》创建一个简单的浏览器:
下面我将以"Kirino"代表这个即将诞生的浏览器 , 当然它将会是一款非常简单的浏览器,因为它只有一个功能,就是启动之后显示home页。
打开我为大家准备好的浏览器模版,开始编写我们的第一个WebKit浏览器吧!
第一步,下载《Hello WebKit》框架运行环境,并解压到目录中,然后再下载《Hello WebKit》框架源代码,释放到运行环境所在的目录中,然后打开框架源代码
找到"HelloWebKit__"程序集,在这里找到"_启动子程序",打开你会发现一个有一个 "HelloWebKits" 的函数,将其的屏蔽状态去除后运行框架代码,如果框架顺利
运行并成功的显示出了一个网页,那么表明一切正常,好了,将函数 "HelloWebKits" 屏蔽后编译框架代码,生成模块文件(*.ec)。
第二步,下载《浏览器模版》源代码,并将其放到《Hello WebKit》框架运行环境目录下,打开这个模版,我已为大家搭建好了控件面板,大家可以用自行排版控件,直接深入主题,如果你不想使用我为你准备的模版,那么你也可以动手自己做一个,并将你编译好的《Hello WebKit》框架模块附加到工程中。
进入正题,开始编写我们的第一个浏览器
首先,你需要声明4个类,当然类的名字由你定,但你得分得清楚它们谁是谁,这里我以MyKirino作为段名,后缀表明了它们的作用:
MyKirinoApp
MyKirinoBrowserProcessHandler
MyKirinoHandler
MyKirinoLifeSpanHandler
图示:
好,接着我们打开第一个类"MyKirinoApp",在基类一栏上填入"CefApp",表明这个类是由基类"CefApp"派生出来的。
在打开第二个类"MyKirinoBrowserProcessHandler",在基类一栏上填入"CefBrowserProcessHandler",表明继承于 CefBrowserProcessHandler基类
在打开第三个类"MyKirinoHandler",在基类一栏上填入"CefClient",表明继承于CefClient基类
最后打开第四个类"MyKirinoLifeSpanHandler",在基类一栏上填入"CefLifeSpanHandler",表明继承于"CefLifeSpanHandler"基类
这样准备工作就完成了,打开"窗口程序集1",找到"_启动子程序",开始编写代码:
变量名 类 型 静态 数组 备 注 main_args CefMainArgs settings CefSettings exit_code 整数型
main_args.
Load ( GetModuleHandle ( 0
) ) exit_code =
CefExecuteProcess ( main_args, App, 0
) 如果真 ( exit_code ≥ 0
) 返回 ( exit_code
) settings.SetAsSingleProcess ( 到整数 ( 是否为调试版 ( ) )) settings.
SetAsNoSandbox ( 1
) settings.
SetAsRemoteDebuggingPort ( 20001
) CefInitialize ( main_args, settings, App, 0
) 载入 ( 窗口1, ,
假 ) CefRunMessageLoop ( ) CefShutdown ( ) 返回 ( 0
)
完成这一步,再次打开"MyKirinoApp"类,声明一个类成员变量"MyBph"类型为"MyKirinoBrowserProcessHandler",添加如下代码:
完成这一步之后,打开"MyKirinoBrowserProcessHandler"类,声明一个名为"OnContextInitialized"的函数,在这里当浏览器初始化完成之后我们会收到一次通知,以告诉我们,浏览器已经初始化完成了。声明好之后添加一个命令"REQUIRE_UI_THREAD",这是一个调试命令,只有在调试状态下有效,编译后将跳过。这个命令的作用是检查到达“OnContextInitialized”函数的通知是否是由浏览器UI线程发出的,如果不是,将会再次中断下来,表明发生异常。
完成之后,跳到自定义数据类型界面,我们来定义一个数据类型用于管理我们的浏览器
再跳到全局变量界面,声明两个全局变量
好了,完成以上工作之后,我们再建立一个程序集,用于辅Zhu管理浏览器
窗口程序集名 保 留 保 留 备 注 MyKirinoBrowserControl
broCount = broCount + 1
返回 ( broCount
) broCount = broCount - 1
MyControlIsValid 逻辑型 Index 整数型
返回 ( Index ≥ 1
且 Index ≤ broCount
) 返回 ( 窗口1.选择夹1.
取窗口句柄 ( ) )
返回 ( 窗口1.选择夹1.
取用户区宽度 ( ) - 3
) 返回 ( 窗口1.选择夹1.
取用户区高度 ( ) - 2
)
好了,所有准备工作都完成了,开始创建我们的浏览器吧
打开类,"MyKirinoBrowserProcessHandler" 声明一个函数"CreateBrowser",添加如下代码:
变量名 类 型 静态 数组 备 注 windowInfo CefWindowInfo browser_settings CefBrowserSettings HandlerIndex 整数型 url 文本型 rect RECT browser 整数型
HandlerIndex =
MyControlNewHandler ( ) 如果真 ( MyControlIsValid ( HandlerIndex
) )
rect.top = 22
rect.left = 10
rect.right =
MyControlGetWidth ( ) rect.bottom =
MyControlGetHeight ( ) windowInfo.
SetAsChild ( MyControlGetCurhWnd ( ) , rect
) url =
“http://www.sunchateau.com/free/UA.htm ” browser =
CefBrowserHostCreateBrowserSync ( windowInfo, broIndex
[ HandlerIndex
] .Handler, url, browser_settings, 0
) 如果真 ( browser ≠ 0
) broIndex
[ HandlerIndex
] .Browser.
ToCpp__ ( browser
)
添加完成之后,细心的你肯定会发现,我们使用了一个空的类(" broIndex [HandlerIndex].Handler ") ,我们什么都代码都没有为它编写。那么,现在我们就来为它添加代码
打开类"MyKirinoHandler",声明一个类成员变量"MyLsh",类型为:"MyKirinoLifeSpanHandler"。并添加以下代码:
完成之后,你会发现,我们又引用了一个新的类,我们同样没有为它添加代码,那么打开"MyKirinoLifeSpanHandler"类,声明一个成员变量"theLifeCount",类型为整数型,用以表明当前运行的浏览器数量,接着添加如下代码:
窗口程序集名 保 留 保 留 备 注 MyKirinoLifeSpanHandler, CefLifeSpanHandler 变量名 类 型 数组 备 注 theLifeCount 整数型
OnAfterCreated 整数型 browser 整数型
REQUIRE_UI_THREAD ( ) theLifeCount = theLifeCount + 1
CEF_BROWSER_RELEASE ( browser
) 返回 ( 0
) REQUIRE_UI_THREAD ( ) CEF_BROWSER_RELEASE ( browser
) 返回 ( 1
) REQUIRE_UI_THREAD ( ) theLifeCount = theLifeCount - 1
如果真 ( theLifeCount = 0
) CefQuitMessageLoop ( ) CEF_BROWSER_RELEASE ( browser)
好了,这样完成之后,我们就为4个类都编写了代码了,最后在打开"MyKirinoApp"类,添加一个成员函数"CreateBrowser",并在函数中调用 MyBph.CreateBrowser()
好了,回到"窗口程序集1",声明一个程序集变量"App"类型为"MyKirinoApp"
最后在 窗口首次激活以及销毁事件中添加以下代码,便大功告成!!
点击运行,如果你成功的看到了来自于WebKit的浏览器窗口,那么期待已久的,属于你的第一个WebKit浏览器变完成拉!
好了,本期介绍就到这里。
随着《Hello WebKit》框架的深入开发,我们将逐步的完善这个属于我们自己的浏览器!
感谢观看!
评分
查看全部评分
本帖被以下淘专辑推荐:
· 精品资源 | 主题: 559, 订阅: 229
· 鱼木 | 主题: 1600, 订阅: 155
· 易精贴 | 主题: 631, 订阅: 30
· 实用干货 | 主题: 118, 订阅: 17
· 易语言高阶必备 | 主题: 35, 订阅: 15
· 更多