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内核)相关推荐

  1. 解决Flash和html在多标签浏览器中互访问题

    在Flash播放器运行时,将不同来源的资源划分到独立的沙箱(sandbox)内,不同沙箱之间不能 彼此操作数据(除非目标沙箱做过一些设置,授权其他沙箱可访问),这就是Flash的跨沙箱问题.当Flas ...

  2. Flash在多标签浏览器中的问题

    原文:http://www.aliued.cn/?p=3169 在Flash播放器运行时,将不同来源的资源划分到独立的沙箱(sandbox)内,不同沙箱之间不能彼此操作数据(除非目标沙箱做过一些设置, ...

  3. Flash在某些多标签浏览器中的“伪沙箱”问题

    在Flash播放器运行时,将不同来源的资源划分到独立的沙箱(sandbox)内,不同沙箱之间不能彼此操作数据(除非目标沙箱做过一些设置,授权其他沙箱可访问),这就是Flash的跨沙箱问题.当Flash ...

  4. 网页概念、常用浏览器及内核、Web标准、HTML语法规范和基本结构标签

    网页.常用浏览器及内核.Web标准.HTML语法规范和基本结构标签 一.网页 1.1.什么是网页? 1.2.什么是HTML?(重点) 1.3.网页的形成? 二.常用浏览器 三.浏览器内核 四.Web标 ...

  5. 浏览器和内核的发展史

    一 浏览器的发展史 Mosaic浏览器 NCSA Mosaic ,或简称Mosaic ,是互联网历史上第一个获普遍使用和能够显示图片的网页浏览器.它是由伊利诺伊大学厄巴纳-香槟分校的NCSA组织在19 ...

  6. 关于各种浏览器的内核

    作为一个前端的开发人员,了解各种浏览器的内核是必不可少的,所以下面我就来说一下各种浏览器的各种内核. 一.Trident内核代表产品Internet Explorer,又称其为IE内核.Trident ...

  7. 多御安全浏览器chromium95内核更新:上网速度更快

    多御安全浏览器内核更新到chromium95,支持64位系统,目前可以在官方网站进行下载安装更新.新版本的多御安全浏览器上网速度更快,体验感更佳.此外,除了性能上的提升,它的主页界面也做了改进,不仅视 ...

  8. QQ浏览器X5内核问题汇总

    23 September 2015 重要更新,X5内核即将更新为Blink内核,到时候下面的这些问题将全部被修复. X5内核开发团队也给开发者们提供了不少指引,推荐关注: http://x5.tenc ...

  9. QQ浏览器x5内核的兼容性问题

    X5内核是腾讯基于优秀开源Webkit[1] 深度优化的浏览器渲染引擎,搭载在最新一代的手机QQ浏览器上[2] ,更快,更便捷. 2014年9月23日,腾讯正式宣布开放业内首个浏览服务开放平台,向AP ...

最新文章

  1. java.lang.ClassNotFoundException: Didn't find class org.apache.http.Protoco
  2. PL/SQL Developer远程访问Oracle数据库
  3. Python 3.10来了!!!
  4. 《JAVA程序设计》第七周学习总结
  5. 商业银行为什么大量组织高净值小规模活动?
  6. mybatis字符串转成数字_Python字符串三种格式化输出
  7. 一个莫名的人,竞标,教训,韩国女人
  8. Java--线程同步
  9. 基于JAVA+SpringMVC+Mybatis+MYSQL的医院预约挂号系统
  10. 将 30 万行代码从 Flow 迁移到 TypeScript 是一种怎样的体验?
  11. 用perl操作excel的介绍
  12. 能否构成三角形的条件代码_【论文】一行代码发一篇ICML?
  13. 【车位识别】基于matlab模板匹配车位识别【含Matlab源码244期】
  14. [Swift]LeetCode528. 按权重随机选择 | Random Pick with Weight
  15. C++ 常见编译错误解决办法
  16. 【Android】移动端接入Cronet实践
  17. java汽车租赁系统(java租赁系统java共享汽车java汽车租借系统)java汽车租赁管理系统java自行车租赁系统共
  18. 实验一-波士顿房价预测
  19. 华为od统一考试B卷【We Are A Team】C++ 实现
  20. 为什么重写equals方法时必须重写hashcode方法

热门文章

  1. 计算机学科专业基础综合811,2012年同济大学硕士研究生专业目录及初复试科目-914...
  2. Accclerate使用教程
  3. 使用 Docker 搭建 WordPress 博客
  4. C++反作弊对抗实战 (目录篇)
  5. 最新增值业务内容点评:移动增值服务
  6. 《具体数学》学习笔记: 4.四种方法推导平方和公式
  7. ChatGPT会带来哪些创业机会?又会带来哪些职业危机?
  8. 写给程序猿们的交互设计
  9. Python爬虫爬取博客访问量
  10. java junit 覆盖率,使用Clover为JUnit测试做测试覆盖率分析