基于Duilib的多标签浏览器(IE内核)
Duilib开源库封装了一个简单的WebBrowser控件,提供了各种事件回调接口。可以方便简单的嵌入到客户端程序做网页展示用,如果想做一个类似IE的多标签的浏览器,就需要封装一下事件接口,并提供一个标签管理器来进行网页管理。
首先参照例子建立一个简单的Duilib项目,并创建一个主窗口CMainWnd,CMainWnd继承于WindowImplBase(窗口基类)和CWebBrowserEventHandler(WebBrowser事件接口)。创建以后,实现以下方法,用于处理WebBrowser事件:
virtual HRESULT STDMETHODCALLTYPE ShowContextMenu(CWebBrowserUI* pWeb, DWORD dwID, POINT __RPC_FAR *ppt, IUnknown __RPC_FAR *pcmdtReserved, IDispatch __RPC_FAR *pdispReserved);virtual HRESULT STDMETHODCALLTYPE GetHostInfo(CWebBrowserUI* pWeb, DOCHOSTUIINFO __RPC_FAR *pInfo);virtual void BeforeNavigate2(CWebBrowserUI* pWeb, IDispatch *pDisp,VARIANT *&url,VARIANT *&Flags,VARIANT *&TargetFrameName,VARIANT *&PostData,VARIANT *&Headers,VARIANT_BOOL *&Cancel);virtual void NavigateError(CWebBrowserUI* pWeb, IDispatch *pDisp,VARIANT * &url,VARIANT *&TargetFrameName,VARIANT *&StatusCode,VARIANT_BOOL *&Cancel);virtual void NavigateComplete2(CWebBrowserUI* pWeb, IDispatch *pDisp,VARIANT *&url);virtual void ProgressChange(CWebBrowserUI* pWeb, LONG nProgress, LONG nProgressMax);virtual void NewWindow3(CWebBrowserUI* pWeb, IDispatch **pDisp, VARIANT_BOOL *&Cancel, DWORD dwFlags, BSTR bstrUrlContext, BSTR bstrUrl);virtual void CommandStateChange(CWebBrowserUI* pWeb, long Command,VARIANT_BOOL Enable);virtual void TitleChange(CWebBrowserUI* pWeb, BSTR bstrTitle);virtual void DocumentComplete(CWebBrowserUI* pWeb, IDispatch *pDisp,VARIANT *&url);
然后我们定一个结构体TabInfo来存储标签和WebBrowser的信息:
typedef struct _tagTabInfo
{UINT64 nID;TCHAR szUrl[2048];TCHAR szTitle[256];TCHAR szFavUrl[2048];TCHAR szFavName[256];CBrowserTab* pTab;CWebBrowserUI* pWebBrowser;
}TabInfo;
有了上面的信息,我们把所有标签使用std::vector<TabInfo*>
来管理,新建、关闭、切换标签都可以通过操作上面的数组来完成。
核心流程如下:
1、NewWindow3 WebBrowser发起新开网页的要求,这个地方创建TabInfo,并添加到标签管理器;
2、TitleChange 网页标题改变,此时更新标签文字;
3、DocumentComplete 网页加载完毕,此时可以通过注入JS来操作网页元素;
效果截图:
完整代码请联系Troy(QQ:656067418)
duilib开源项目交流圈(QQ群:261851826、261675375)
基于Duilib的多标签浏览器(IE内核)相关推荐
- 解决Flash和html在多标签浏览器中互访问题
在Flash播放器运行时,将不同来源的资源划分到独立的沙箱(sandbox)内,不同沙箱之间不能 彼此操作数据(除非目标沙箱做过一些设置,授权其他沙箱可访问),这就是Flash的跨沙箱问题.当Flas ...
- Flash在多标签浏览器中的问题
原文:http://www.aliued.cn/?p=3169 在Flash播放器运行时,将不同来源的资源划分到独立的沙箱(sandbox)内,不同沙箱之间不能彼此操作数据(除非目标沙箱做过一些设置, ...
- Flash在某些多标签浏览器中的“伪沙箱”问题
在Flash播放器运行时,将不同来源的资源划分到独立的沙箱(sandbox)内,不同沙箱之间不能彼此操作数据(除非目标沙箱做过一些设置,授权其他沙箱可访问),这就是Flash的跨沙箱问题.当Flash ...
- 网页概念、常用浏览器及内核、Web标准、HTML语法规范和基本结构标签
网页.常用浏览器及内核.Web标准.HTML语法规范和基本结构标签 一.网页 1.1.什么是网页? 1.2.什么是HTML?(重点) 1.3.网页的形成? 二.常用浏览器 三.浏览器内核 四.Web标 ...
- 浏览器和内核的发展史
一 浏览器的发展史 Mosaic浏览器 NCSA Mosaic ,或简称Mosaic ,是互联网历史上第一个获普遍使用和能够显示图片的网页浏览器.它是由伊利诺伊大学厄巴纳-香槟分校的NCSA组织在19 ...
- 关于各种浏览器的内核
作为一个前端的开发人员,了解各种浏览器的内核是必不可少的,所以下面我就来说一下各种浏览器的各种内核. 一.Trident内核代表产品Internet Explorer,又称其为IE内核.Trident ...
- 多御安全浏览器chromium95内核更新:上网速度更快
多御安全浏览器内核更新到chromium95,支持64位系统,目前可以在官方网站进行下载安装更新.新版本的多御安全浏览器上网速度更快,体验感更佳.此外,除了性能上的提升,它的主页界面也做了改进,不仅视 ...
- QQ浏览器X5内核问题汇总
23 September 2015 重要更新,X5内核即将更新为Blink内核,到时候下面的这些问题将全部被修复. X5内核开发团队也给开发者们提供了不少指引,推荐关注: http://x5.tenc ...
- QQ浏览器x5内核的兼容性问题
X5内核是腾讯基于优秀开源Webkit[1] 深度优化的浏览器渲染引擎,搭载在最新一代的手机QQ浏览器上[2] ,更快,更便捷. 2014年9月23日,腾讯正式宣布开放业内首个浏览服务开放平台,向AP ...
最新文章
- java.lang.ClassNotFoundException: Didn't find class org.apache.http.Protoco
- PL/SQL Developer远程访问Oracle数据库
- Python 3.10来了!!!
- 《JAVA程序设计》第七周学习总结
- 商业银行为什么大量组织高净值小规模活动?
- mybatis字符串转成数字_Python字符串三种格式化输出
- 一个莫名的人,竞标,教训,韩国女人
- Java--线程同步
- 基于JAVA+SpringMVC+Mybatis+MYSQL的医院预约挂号系统
- 将 30 万行代码从 Flow 迁移到 TypeScript 是一种怎样的体验?
- 用perl操作excel的介绍
- 能否构成三角形的条件代码_【论文】一行代码发一篇ICML?
- 【车位识别】基于matlab模板匹配车位识别【含Matlab源码244期】
- [Swift]LeetCode528. 按权重随机选择 | Random Pick with Weight
- C++ 常见编译错误解决办法
- 【Android】移动端接入Cronet实践
- java汽车租赁系统(java租赁系统java共享汽车java汽车租借系统)java汽车租赁管理系统java自行车租赁系统共
- 实验一-波士顿房价预测
- 华为od统一考试B卷【We Are A Team】C++ 实现
- 为什么重写equals方法时必须重写hashcode方法
热门文章
- 计算机学科专业基础综合811,2012年同济大学硕士研究生专业目录及初复试科目-914...
- Accclerate使用教程
- 使用 Docker 搭建 WordPress 博客
- C++反作弊对抗实战 (目录篇)
- 最新增值业务内容点评:移动增值服务
- 《具体数学》学习笔记: 4.四种方法推导平方和公式
- ChatGPT会带来哪些创业机会?又会带来哪些职业危机?
- 写给程序猿们的交互设计
- Python爬虫爬取博客访问量
- java junit 覆盖率,使用Clover为JUnit测试做测试覆盖率分析