|

分享源码
界面截图: |
|
是否带模块: |
纯源码 |
备注说明: |
- |
《Hello WebKit》, 是完全面向对象的框架,所有的对浏览器的操作都在类中进行,所有的回调事件也在类中响应,总之一切皆为 , 在这里请将《Hello WebKit》框架视作易语言版的Cef框架,因为本身也是如此。
《Hello WebKit》框架运行环境下载: https://drive.google.com/file/d/0B8L3SgpHRzjtSzc2YXNHMFpjZnc/view?usp=sharing
《Hello WebKit》框架源代码:
Hello WebKit 1.0000.02.rar
(26.75 KB, 下载次数: 526)
《WebKit Browser 上一期模版》源代码:
WebKit Browser1.0.rar
(14.12 KB, 下载次数: 177)
《WebKit Browser 本期版本》源代码:
WebKit Browser2.0.rar
(26.66 KB, 下载次数: 621)
《Hello WebKit》互助群: 89456201
欢迎加入WebKit!系列,第一期,创建一个简单的浏览器
--------------------------------------------------------------------------------------------------------------------------------------------------------
注:老实说我TM也不太看得懂Google大神们留下的注释,以下命令的解释,基本上是以它的作用来分析的。
(类名) = 表示为基类,需要由用户继承的
类名 = 表示是由浏览器提供的,或者用于数据处理的
第一期使用命令介绍:
类:
(CefApp): 与进程,命令行参数,代理,资源管理相关的回调类
(CefBrowserProcessHandler): 用于接收进程相关的回调通知。
(CefClient): 回调管理类,主要是用于向浏览器反回我们需要接管哪些功能的类。
(CefLifeSpanHandler):浏览器的运行管理类,包含当浏览器创建完成之后,浏览器被关闭等通知
(CefMainArgs): 数据类,用于设置当前应用实例句柄的。
(CefSettings): 数据类,用于设置一些浏览器整体的基本信息
(CefWindowInfo): 数据类,用于设置一些浏览器的窗口信息
(CefBrowserSettings): 数据类,用于设置一些浏览器的基本信息
用到的类命令:
返回值 (CefBrowserProcessHandler) = (CefApp).GetBrowserProcessHandler() '获取一个用于管理浏览器进程的类
返回值 空= (CefBrowserProcessHandler).OnContextInitialized() '回调通知函数,告诉我们浏览器已经准备就绪了。
返回值 (CefLifeSpanHandler) = (CefClient).GetLifeSpanHandler() '向浏览器返回我们用于接管浏览器进程的类
返回值 空 = (CefLifeSpanHandler).OnAfterCreated() '回调通知函数,用于告诉我们,当前有一个新的浏览器创建好了
返回值 空 = (CefLifeSpanHandler).DoClose() '回调通知函数,貌似是表示所有浏览器都关闭之后,Cef上有一大段注释,但是TM始终看不明白...
返回值 空 = (CefLifeSpanHandler).OnBeforeClose() '回调通知函数,用于告诉我们,当前有一个浏览器被关闭了
返回值 空 = CefMainArgs.Load() '数据类函数,用于设置当前当前应用的实例句柄
返回值 空 = CefSettings.SetAsSingleProcess() '数据类函数,是否使用单进程运行浏览器, 1.单进程运行 0.多进程运行。默认是以多进程运行的。
返回值 空 = CefSettings.SetAsNoSandbox() '数据类函数,是否关闭沙盘功能
返回值 空 = CefSettings.SetAsRemoteDebuggingPort() '数据类函数,设置远程调试端口
返回值 空 = CefWindowInfo.SetAsChild() '数据类函数,设置浏览器窗口为子窗口
通用类命令:
(All).AddRef() '给这个函数所属的类增加一次引用计数
(All).Release() '给这个函数所属的类释放一次引用计数
(All).HasOneRef() '判断当前这个类是不是第一次被引用
(All).Wrap() '实际上《Hello WebKit》框架的类都是以一种接近于C++类的存在,为了能给浏览器使用,我们必须要将这个类转换为近似于C的类。这个函数就有这样的作用
(All).Unwrap() '从C类中取回我们的C++类
(All).ToCpp__() '导入或取出由浏览器提供的类指针或者数据指针
通用命令:
CefBrowserHostCreateBrowserSync() '创建一个新的浏览器,成功返回浏览器类CefBrowser.
CefExecuteProcess() '初始化浏览器进程
CefInitialize() '全初始化,该函数执行完成之后,(CefBrowserProcessHandler).OnContextInitialized() 将收到通知
CefRunMessageLoop() '浏览器进程消息循环
CefShutdown() '浏览器进程结束
CefQuitMessageLoop() '向所有(多进程下)浏览器进程发送结束通知
REQUIRE_UI_THREAD() '调试函数,用于检查执行到该函数位置的线程/进程是否为UI线程/进程,如果不是将被中断下来
CEF_BROWSER_RELEASE() '释放一次浏览器的引用计数
第二期使用命令介绍:
(CefDisplayHandler): 与浏览器状态显示相关的类
(CefBrowser): 浏览器类,用于控制或者取得浏览器的相关信息,最常用的类
(CefBrowserHost): 浏览器窗口类,用于控制或者取得浏览器窗口的相关信息,最常用的类
(CefFrame): 浏览器框架类,用于控制或者取得浏览器框架的相关信息,最常用的类,后期对网页的各种操作都由这个类来操作,包括javascript脚本的执行
(CefString): 字符串类,与字符串操作相关的类,最常用的类
用到的类命令:
返回值 (CefDisplayHandler) = (CefClient).GetDisplayHandler() '回调通知函数,向浏览器返回我们用于接管浏览器状态信息的类
返回值 空 = (CefDisplayHandler).OnAddressChange() '回调通知函数,当浏览器地址发生改变时
返回值 空 = (CefDisplayHandler).OnTitleChange() '回调通知函数,当浏览器标题发生改变时
返回值 空 = (CefDisplayHandler).OnStatusMessage() '回调通知函数,当鼠标放置于热点或者链接上时
返回值 逻辑型 = CefBrowser.CanGoBack() '当前浏览器是否可以后退
返回值 空 = CefBrowser.GoBack() '浏览器退回上一个网页
返回值 逻辑型 = CefBrowser.CanGoForward() '当前浏览器是否可以前进
返回值 空 = CefBrowser.GoForward() '浏览器前进到上一个网页
返回值 空 = CefBrowser.Reload() '重新载入网页
返回值 空 = CefBrowser.StopLoad() '停止载入网页
返回值 CefFrame = CefBrowser.GetMainFrame() '取出当前浏览器的主网页框架类
返回值 CefBrowserHost= CefBrowser.GetHost() '取出当前浏览器的窗口类
返回值 空 = CefFrame .LoadURL() '浏览一个新的URL
返回值 空 = CefBrowserHost.NotifyMoveOrResizeStarted() '通知浏览器需要调整窗口大小了
返回值 窗口句柄 = CefBrowserHost.GetWindowHandle() '取得浏览器的窗口句柄
返回值 字符串指针 = CefString.ToCpp__() '取出字符串指针
返回值 空= CefString.FromASCII() '从文本载入指针
返回值 空 = CefString.CopyI() '引用一个由系统提供的字符串指针
返回值 空 = CefString.CopyT() '复制一个新的Cef字符串
返回值 空 = CefString.ToString() '取出文本
--------------------------------------------------------------------------------------------------------------------------------------------------------
第二期,接着上期我们创建的浏览器,来继续完善它。
今天要给浏览器加上的功能:
前进,后退,刷新,浏览 等导航功能
显示网页标题功能
显示当前访问网址功能
显示鼠标指向链接功能
适应拖动窗口大小功能
前提:
每一期的例程《Hello WebKit》框架都会更新,所以需要重新下载每期的框架源代码,按照第一期的方法,将下载下来的《Hello WebKit》框架源代码放到《Hello WebKit》运行环境下,重新编译为模块,给浏览器使用。
进入正题,开始编写代码:
打开上一期我们编写好的那个只有一个功能的浏览器,我们继续来完善
第一步,先来完成导航功能
声明一个全局变量: "bCurViewIndex" 表示当前界面上正在显示的浏览器索引
并在窗口创建完毕事件里给它添加一个初值
bCurViewIndex=1
回到界面上,选择 "后退按钮"
单击进去,添加以下代码:
完成后退功能,接着选择 "前进按钮" 单击进去,添加以下代码:
完成前进功能,接着选择 "刷新按钮" 单击进去,添加以下代码:
完成刷新功能,接着来做浏览功能。浏览功能,有一些特殊,因为浏览器有一个消息循环系统,某一些消息会被浏览器占用,
进而导致我们的组件收不到某一些消息,所以这里要稍微做一些处理。
首先,声明两个API:
声明一个名为"lpfnEditWndProc"的程序集变量,类型为"子程序指针",(变量名可以随你自定,但如果你不知道这样做是为了什么,那就最好不要改了)
并在 "窗口1首次激活"中添加如下代码。
完成之后新建一个子程序名为"地址栏消息处理_"并添加以下代码:
完成浏览功能(在地址栏上输入URL,回车即可访问网页)。
至此导航功能就添加完毕了,接着来添加一些响应函数,来获得,当前浏览器的地址信息,标题信息,以及热点信息。
新建一个类,名为"MyKirinoDisplayHandler",在基类一栏写填入,"CefDisplayHandler".
完成之后,打开类"MyKirinoHandler",声明一个名为"MyDlh"的类成员变量,类型为"MyKirinoDisplayHandler".并添加以下代码:
完成之后,接着再打开我们刚才新建的类,"MyKirinoDisplayHandler".
添加第一个成员函数:"OnAddressChange" , 即当浏览器地址被改变时,接收通知
并在程序集"MyKirinoBrowserControl" 下添加以下两个函数
在回到"MyKirinoDisplayHandler"下添加第二个成员函数"OnTitleChange",当浏览器标题发生改变时,接收通知:
然后打开程序集"MyKirinoBrowserControl",添加以下函数:
在回到"MyKirinoDisplayHandler"下添加第三个成员函数"OnStatusMessage",浏览器状态信息,当鼠标放到热点或者链接上时,接收通知:
然后打开程序集"MyKirinoBrowserControl",添加以下函数:
至此,浏览器状态信息的显示功能就完成了。
最后来做当拖动窗口时改变浏览器窗口大小的功能,打开"_窗口1_尺寸被改变" 添加如下代码:
打开"MyKirinoBrowserHandler"程序集,在对"MyControlGetWidth" 和 “MyControlGetHeight" 函数做一些调整
好了,到此全部代码就编写完成了,运行你的浏览器,输入一个网址回车访问看看?,顺便别忘了调整一下窗口大小看看噢!~
本期结束,感谢观看!
|
评分
-
查看全部评分
本帖被以下淘专辑推荐:
- · 精品资源|主题: 559, 订阅: 229
- · 鱼木|主题: 1600, 订阅: 155
- · 乐天精品收藏帖|主题: 341, 订阅: 59
- · 实用干货|主题: 118, 订阅: 17
|