My FAQ,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > Visual C++ > IE编程
让你的浏览器更强!过滤FLASH、控件等等
作者:111222 时间:2001-10-10 10:11 出处:互联网 责编:MyFAQ
              摘要:让你的浏览器更强!过滤FLASH、控件等等

(本文涉及IE\Internet Explorer\WebBrowser2\CHtmlView\name space)

商业网站的广告越做越大。新浪网的巨幅FLASH广告居然充满了整个屏幕!

广大网民上网可受不了这个.....小猫怎么会受得了FLASH的蹂躏~

怎么办呢?一般来说,IE控件可以禁用图片、视频、声音和控件

禁止控件自然就禁止了FLASH,但这样将使浏览器失去大不分功能,不于考虑。

那么过滤整个机器的URL可不可以呢?

可以,但那样底层的操作不是一步两步能实现的,另外....对整个系统以及浏览器的稳定性有较大影响。

也许你会说,做一个127.0.0.1的代理服务器过滤FLASH,再让给自己的浏览器使用该代理。结果会和上面一样,稳定性不好,还可能会和浏览器自身的代理发生冲突。

到底怎么做?呵呵~正题来了!首先感谢畅游的帮助。

利用name space!

下面就说在自编浏览器里的具体实现:(如果你想了解name space的更多内容请访问MSDN网站搜索"name space"关键字)

首先,给你的自编浏览器填加一个ATL类,填加之后CLASS向导会自动给你的工程加一个modul,这些我们都不必理会。

假设所填加的类叫:IAUrl

之后你要做的就是给类填加IInternetProtocolInfo和IInternetProtocol两个接口的实现。并加一个IInternetProtocolSink* m_pProtSink;成员变量。

 

下面要做的很简单:

找到IAUrl的Start函数(实现上面两个接口后回自动出现该函数)

实现如下代码:

STDMETHODIMP IAUrl::Start(
        LPCWSTR szUrl,
        IInternetProtocolSink *pIProtSink,
        IInternetBindInfo *pIBindInfo,
        DWORD grfSTI,
        DWORD dwReserved)
{
 // 检查URL请求的最后4个字符是否为.swf,是的话,就过滤掉

 CString s(szUrl);
 if(s.Right(4)==".swf")
 {
  m_pProtSink = pIProtSink;
  m_pProtSink->AddRef();
  m_pProtSink->ReportResult(S_OK, 0, 0);
  m_pProtSink->Release();
  return S_OK;
 }
 return INET_E_USE_DEFAULT_PROTOCOLHANDLER;
}   

 

针对IAUrl类的工作结束了。下面在你的窗口类里调用IIAUrl接口

给CMainFrame增加2个成员变量:

 IInternetSession* m_pSession;
 IClassFactory* m_pFactory;

然后在程序初始阶段(比如OnCreate里面)

 //注册name space

HRESULT hr = CoGetClassObject(CLSID_IAUrl, CLSCTX_SERVER, NULL, IID_IClassFactory, (void**)&m_pFactory);
 if(hr==S_OK)
 {
  if(CoInternetGetSession(0, &m_pSession, 0)==S_OK)
   m_pSession->RegisterNameSpace(m_pFactory, CLSID_IAUrl, L"http", 0, NULL, 0);
 }

在程序结束的时候

 //注销name space

 if(m_pSession!=NULL)
 {
  m_pSession->UnregisterNameSpace(m_pFactory, L"http");
  m_pSession->Release();
 }
 if(m_pFactory!=NULL)
  m_pFactory->Release();

 }

OK,搞定了,现在你的浏览器可以过滤FLASH了,嘿!效果真不错!

下载IAUrl类原代码:(3KB)

http://263.csdn.net/FileBBS/files/2001_10/T_726_1.zip

 

    

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 myfaq.com.cn All rights reserved. www.myfaq.com.cn 版权所有