浏览器的定制与扩展

前言

由于本人在开发中经常要在程序中嵌入浏览器,为了符合自己的 需求经常要对浏览器进行扩展和定制,解决这些问题需在网上找资料和学习的过 程,我想可能很多开发者或许会遇到同样的问题,特写此文,以供大家参考。

在MFC中使用浏览器

在MFC中微软为我们提供了CHtmlView、 CDHtmlDialog类让我们的程序很方便的嵌入浏览器和进行浏览器的二次开发,这 比直 接使用WebBrowser控件要方便很多,所以本文中讨论的浏览器的问题都是 针对CHtmlView来讨论的。文中将提到一个类CLhpHtmlView, 它是CHtmlView的派 生类,文中提及的扩展或定制都将在CLhpHtmlView类(或派生类)上实现。

怎样扩展或定制浏览器

浏览器定义了一些扩展接口(如 IDocHostUIHandler可以定制浏览器界面有关的行为),以便开发者进行定制和 扩展。浏览 器会在需要的时候向他的控制站点查询这些接口,在控制站点里实 现相应的接口就可以进行相应的扩展。在MFC7.01类 库中,CHtmlView使用的控 制站点是CHtmlControlSite的,在CHtmlControlSite类中 只实现了接口 IDocHostUIHandler,而要实现更多的扩展接口,必须用自定义的控制站类来取 代CHtmlControlSite,在下文中提及的类CDocHostSite即为自定义 的控制站类 。

关于接口的介绍请参考: http://dev.csdn.net/develop/article/48/48483.shtm

如何 使自定义的控制站点来替换默认的控制站点呢?在MFC7.0中只需重载CHtmlView 的虚函数CreateControlSite即可:

BOOL CLhpHtmlView::CreateControlSite(COleControlContainer * pContainer,
COleControlSite ** ppSite, UINT /*nID*/, REFCLSID /*clsid*/)
{
  *ppSite = new CDocHostSite(pContainer, this);// 创建自己的 控制站点实例
  return (*ppSite) ? TRUE : FALSE;
}
VC6.0要替换控制站要复杂的多,这里就不讨论了,如需要6.0版本的请 给我发邮件到yourshine@21cn.com。

定制鼠标右键弹出出菜单

要 定制浏览器的鼠标右键弹出菜单,必须在自定义的控制站点类中实现 IDocHostUIHandler2接口,并且IE的 版本是5.5或以上。在接口 IDocHostUIHandler2的ShowContextMenu方法中调用浏览器类的 OnShowContextMenu虚函数,我们 在浏览器类的派生类重载此虚函数即可实现右 键菜单的定制,参见代码

HRESULT CDocHostSite::XDocHostUIHandler::ShowContextMenu(DWORD dwID,
                              POINT * ppt,
                             IUnknown * pcmdtReserved,
                              IDispatch * pdispReserved)
{
  METHOD_PROLOGUE (CDocHostSite, DocHostUIHandler);
  return pThis->m_pView- >OnShowContextMenu( dwID, ppt, pcmdtReserved,pdispReserved );
}
HRESULT CLhpHtmlView::OnShowContextMenu(DWORD dwID,
                     LPPOINT ppt,
                     LPUNKNOWN pcmdtReserved,
                     LPDISPATCH pdispReserved)
{
   HRESULT result = S_FALSE;
  switch(m_ContextMenuMode)
   {
  case NoContextMenu:      // 无菜单
     result=S_OK;
    break;
  case DefaultMenu:         // 默认菜单
    break;
  case TextSelectionOnly:       // 仅文本选择菜单
    if(!(dwID == CONTEXT_MENU_TEXTSELECT || dwID == CONTEXT_MENU_CONTROL))
       result=S_OK;
    break;
  case CustomMenu:         // 自定义菜单
    if(dwID! =CONTEXT_MENU_TEXTSELECT)
       result=OnShowCustomContextMenu(ppt,pcmdtReserved,pdispReserved);
    break;
  }
  return result;
}

时间: 2024-10-20 15:31:35

浏览器的定制与扩展的相关文章

三款开源企业软件插件带你感知定制和扩展的微妙

当提起软件插件的时候,您可能首先想到的是知名的网页浏览器插件,例如 Adobe Flash Player 和 QuickTime Player.然而,企业软件插件因向企业提高灵活性而变得越发重要. 此外,插件也成为扩展企业软件功能性的一个途径.如下图所示,主应用程序独立于插件之外运行,这样就使终端用户可以动态添加和更新插件,而无需对主应用程序作出变更. 成功的企业软件插件推荐 如今,企业在评估企业软件时,"业务敏捷性"成为在日新月异的市场中越来越受到重视的品质.各企业认识到,他们的业务

360安全浏览器如何不显示扩展

  360安全浏览器不显示扩展的方法如下: 如果不想删除该扩展,而只是暂时不使用,也可以通过点击删除按钮后边的设置图标选择不显示到浏览器上. 360安全浏览器(360Safety Browser)是360安全中心推出的一款基于IE内核的浏览器,是世界之窗开发者凤凰工作室和360安全中心合作的产品.

思科在Chrome和火狐浏览器上的WebEx扩展 有远程代码执行漏洞CVE-2017-6753

思科 WebEx 扩展再曝严重的远程代码执行漏洞 , 今年再曝严重的远程代码执行漏洞(CVE-2017-6753),这是本年度第二次发现该扩展存在漏洞.攻击者可利用该漏洞在目标机器上以受影响浏览器权限远程执行恶意代码. 思科WebEx扩展远程代码执行漏洞CVE-2017-6753 思科发布的安全通告中 这样描述该漏洞 : " 思科用于 Google Chrome 和 Mozilla Firefox 浏览的 WebEx 扩展存在漏洞 , 允许远程未认证攻击者以受影响浏览器权限在受影响系统中执行任意

如何只用浏览器扩展处理图片

  浏览器中需要添加"扩展"或"轻应用".以360浏览器为例,在浏览器的工具栏上点击"扩展"按钮,在下拉菜单中单击"扩展中心"一项,打开"360应用市场"页面,在该页面中通过分类浏览或用右上角的搜索框,即可找到自己所需的轻应用. 图1 1. 右键搜图 即点即搜 图2 添加"图片搜索"或"谷歌相似图片搜索"的Web轻应用,在网页图片上点击右键,选择"搜索相似图

Chrome(谷歌)浏览器扩展开发初探

        FF(火狐)浏览器插件已经完成了,确实也很好用,但是有些同学不习惯使用ff浏览器,喜欢使用谷歌浏览器,点击这里查看上篇问题.那么我们就开发一个chrome的扩展,实现订餐功能.         在FF浏览器扩展中,我们使用xul定义FF的界面,使用javascript实现处理逻辑,在谷歌浏览器中,我们同样不需要学习activeX,也不需要学习com,只是使用html和javascript即可实现开发谷歌浏览器扩展的功能,只是为了简单起见,我们这次手动点击按钮,出发订餐操作.   

可挑战Chrome!Edge浏览器神级扩展体验

虽然Win10的默认浏览器Edge花费了微软的大量心血,但是Win10用户最青睐的浏览器,仍是来自Google的Chrome.和Edge相比,Chrome凭借着大量的扩展和插件,在功能上大大占优.Edge在Win10一周年更新后,也支持了扩展,现在一款神级的扩展Tampermonkey终于登陆Edge了!凭借着这款扩展,Edge终于又有一个强有力的理由,让人叛逃Chrome.那么Edge版的Tampermonkey体验如何?一起来看看吧. Tampermonkey已经可以在Win商店中心下载 首

通过Eclipse插件来扩展IBM Lotus Symphony

简介:本文通过集成一个简单的插件实例,介绍了在 IBM Lotus Symphony 中如何开发和部署 Eclipse 插件,实现对 IBM Lotus Symphony 的用户定制和扩展. 简介 从功能上讲,Lotus Symphony 是一组集创建.编辑和共享文字处理,电子表格和演示文稿为一体的免 费办公套件.它支持开放文档格式(Open Document Format,简称 ODF).这也就是说,通过 Lotus Symphony 创建编辑生成的 ODF 文件,还可以被其他的遵循 ODF

火狐浏览器插件开发入门教程

  许多网友都想学习火狐浏览器插件开发这一方面的知识,不过,目前,许多资料都是比较晦涩难懂,不太适合初学者.那么,初学者想要学习火狐浏览器插件开发该怎么入门呢?还是一起来看看今天的火狐浏览器插件开发入门教程! 火狐浏览器 首先需要知道什么是"Firefox插件".这里说的"插件"只是一个通俗的说法,其实Firefox这种扩展功能的"插件"包括:扩展extension和插件plugin. Firefox官方网站的解释是:Extensions are

Opera浏览器软件特性

  高速度 Opera充分利用缓存机制,快速载入页面.Opera在各项测评中得到相当好的成绩.它使用独家排版引擎Presto.2007年9月4日,Opera推出了采用名为Futhark的JavaScript引擎的9.5测试版,从该版本开始,Opera开发代号变更为Kestrel.开发代号Kestrel一直延用至Opera 9.64.2011年6月28日,Opera推出11.50正式版,代号为"Swordfish"(剑鱼) 多功能且小巧 Opera功能众多,除了浏览网页,还包括POP邮件