当前位置: 首页 > news >正文

[IE编程] WebBrowser控件的多页面浏览(Tabbed Browsing)开发接口

从IE7 开始, IE 支持多页面(Tab)浏览。 而IE 的WebBrowser 控件也相应的多页面浏览开发接口。 出于向下兼容考虑,该接口在缺省情况下是被屏蔽的。 假设你用WebBrowser 控件开发一个浏览器 MyTabBrowser, 你会发现右键菜单的"在新标签页中打开" (Open in New Tab)项是灰色的(如下图)。

IE内核 开发 多页面浏览器

打开这个功能,你需要在注册表里面创建以自己文件名为值的DWORD值:

HKEY_LOCAL_MACHINE (or HKEY_CURRENT_USER)
SOFTWARE
Microsoft
Internet Explorer
Main
FeatureControl
FEATURE_TABBED_BROWSING
MyTabBrowser.exe= 0x00000001

多页面浏览开发接口开启之后,你的程序MyTabBrowser 就可以和IE一样响应"Open in New Tab”的请求了。 IE 定义了以下3种动作为"Open in New Tab"的请求

1)用户在右键菜单中点击“Open in New Tab” 项

2) 用户用鼠标中键点击链接

3)用户按住Ctrl 键点击链接

该请求会激发 DWebBrowserEvents2::NewWindow3 事件, 该事件的参数dwFlags 标示了这个请求的类型:

NWMF_FORCEWINDOW: 在新窗口中打开链接. NWMF_FORCETAB: 在新Tab 中打开链接.

以下是简单的代码示例如何处理该事件:

void __stdcall OnEventNewWindow3(IDispatch **ppDisp, VARIANT_BOOL *Cancel, DWORD dwFlags, BSTR bstrUrlContext, BSTR bstrUrl) { if (dwFlags & NWMF_FORCETAB) // Open in a new Tab { CComPtr<IWebBrowser2> spBrowser = OpenNewTab(); // Create a new tab and return the IWebBrowser2 pointer if (spBrowser) { HRESULT hr = spBrowser->QueryInterface(IID_IDispatch, (void**)ppDisp); *Cancel = SUCCEEDED(hr) ? VARIANT_FALSE : VARIANT_TRUE; } } else if (dwFlags & NWMF_FORCEWINDOW) // Open in a new Window { ..... } }

>> 原创文章的版权属于作者,转载请注明出处和作者信息(http://blog.csdn.net/WinGeek/), 谢谢。 <<

相关文章:

  • LeetCode -- 查找最小公共祖先
  • 8位程序员对Oracle收购Sun的担忧与期待
  • LeetCode -- 顺时针旋转图片90度
  • LeetCode -- Path Sum ||
  • 35岁IT“老人”的随笔
  • LeetCode -- Decode Ways
  • 嵌入式Linux系统中的GUI系统的研究与移植
  • LeetCode -- Substring with Concatenation of All Words
  • asp.net MVC5 sitemap 的使用
  • CentOS 5.x 預設啟動的服務簡易說明
  • Leet -- Remove Duplicates from Sorted Array
  • LeetCode -- Best Time to Buy and Sell Stock II
  • 海闊天空 信樂團
  • Contains Duplicate III
  • LeetCode -- Combination Sum
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • 【知识碎片】第三方登录弹窗效果
  • Angular Elements 及其运作原理
  • Angular 响应式表单 基础例子
  • CSS相对定位
  • exports和module.exports
  • GraphQL学习过程应该是这样的
  • JavaScript创建对象的四种方式
  • Java编程基础24——递归练习
  • js
  • Linux链接文件
  • nodejs调试方法
  • Redis的resp协议
  • RxJS: 简单入门
  • TypeScript实现数据结构(一)栈,队列,链表
  • Vue组件定义
  • WePY 在小程序性能调优上做出的探究
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 聊一聊前端的监控
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 小程序 setData 学问多
  • 写代码的正确姿势
  • 一、python与pycharm的安装
  • 在electron中实现跨域请求,无需更改服务器端设置
  • 怎样选择前端框架
  • 06-01 点餐小程序前台界面搭建
  • 2017年360最后一道编程题
  • ![CDATA[ ]] 是什么东东
  • # .NET Framework中使用命名管道进行进程间通信
  • #、%和$符号在OGNL表达式中经常出现
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (2)STM32单片机上位机
  • (C++17) optional的使用
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (转载)跟我一起学习VIM - The Life Changing Editor