开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 24572|回复: 47
打印 上一主题 下一主题
收起左侧

[易源码分享] 欢迎加入WebKit!打造你的HTML5浏览器,第二期,给浏览器加上导航功能。

[复制链接]
结帖率:82% (9/11)
跳转到指定楼层
发表于 2016-3-14 22:33:17 | 只看该作者 回帖奖励 |正序浏览 |阅读模式   广东省深圳市
分享源码
界面截图:
是否带模块: 纯源码
备注说明: -
      《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》运行环境下,重新编译为模块,给浏览器使用。

进入正题,开始编写代码:




  • 关闭
  • [url=]上传附件[/url]




打开上一期我们编写好的那个只有一个功能的浏览器,我们继续来完善

第一步,先来完成导航功能

声明一个全局变量: "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" 函数做一些调整





好了,到此全部代码就编写完成了,运行你的浏览器,输入一个网址回车访问看看?,顺便别忘了调整一下窗口大小看看噢!~

本期结束,感谢观看!




评分

参与人数 10好评 +7 精币 +21 收起 理由
q317517439 + 1 环境无法下载~!!!
精易客服 + 1 + 5 精彩文章希望继续努力
hyi + 1 支持开源~!感谢分享
冰点 + 1 + 5 精彩文章希望继续努力
精国软件 + 1 + 1 感谢分享,很给力!~
大头佛 + 1 + 3 精彩文章希望继续努力
z3201 + 1 支持开源~!感谢分享
なす随风ぬね + 1 + 2 支持开源~!感谢分享
波哥野结衣 + 1 + 2 路过赞一赞
大表舅 + 1 支持开源~!感谢分享

查看全部评分


本帖被以下淘专辑推荐:

47
发表于 2022-3-24 22:51:28 | 只看该作者   辽宁省沈阳市
非常实用
回复 支持 反对

使用道具 举报

结帖率:100% (35/35)
46
发表于 2020-5-13 13:35:25 | 只看该作者   江西省吉安市
下载地址失效了,,,
回复 支持 反对

使用道具 举报

结帖率:0% (0/1)
45
发表于 2019-8-20 15:41:13 | 只看该作者   浙江省舟山市
66666666666666666
回复 支持 反对

使用道具 举报

结帖率:40% (2/5)
44
发表于 2019-5-12 20:52:02 | 只看该作者   福建省厦门市
都会发光三代富贵发电股份大概
回复 支持 反对

使用道具 举报

结帖率:40% (2/5)
43
发表于 2019-5-12 20:50:32 | 只看该作者   福建省厦门市
gdffdgsffds的富斗富的房东富斗富房东房东地方
回复 支持 反对

使用道具 举报

结帖率:30% (3/10)
42
发表于 2017-10-9 23:16:39 | 只看该作者   广东省深圳市
学习了,新手表示看不懂
回复 支持 反对

使用道具 举报

结帖率:11% (1/9)
41
发表于 2017-7-21 11:11:11 | 只看该作者   上海市上海市
我想问下 webkit 怎么设置ua 想设置成手机访问 不要pc访问得
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)
40
发表于 2017-7-20 22:51:25 | 只看该作者   江西省宜春市
学习了,新手表示看不懂
回复 支持 反对

使用道具 举报

39
发表于 2017-6-25 22:21:32 | 只看该作者   广东省肇庆市
学习一下学习一下
回复 支持 反对

使用道具 举报

38
发表于 2017-6-25 17:39:47 | 只看该作者   河北省承德市
留个记号,支持高技术含量的东西
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:[email protected]
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表