描述:
如题,如何利用异步可插入协议对网络资源分类,url地址过滤?
大家指点一下怎么做?原理,流程,示例,代码均可
解决方案1:
额...如果IHTMLDocument2接口指针是 pDoc ,那么
IHTMLElementCollection *pElemCollection = NULL;
pDoc->get_all(&pElemCollection);
然后再利用IHTMLElementCollection 去枚举就可以了,一般都是拿到IDispath接口,然后再用这个接口去QueryInterface得到IHTMLElement
元素判断就举个判断flash的例子好了,不是很全面,基本就这个意思
IsFlashObject(IHTMLElement *pElem)
{
CHECK_RETURN( NULL != pElem, FALSE);
BOOL bRet = FALSE;
HRESULT hr = S_FALSE;
CComPtr<IHTMLObjectElement> pElemObj;
hr = pElem->QueryInterface(IID_IHTMLObjectElement, (void**)&pElemObj);
if (SUCCEEDED(hr) && (NULL != pElemObj))
{
BSTR bstrClassid = NULL;
pElemObj->get_classid(&bstrClassid);
if (NULL != bstrClassid && _wcsicmp(bstrClassid, _T(HTML_FLASH_CLASSID)) == 0)
{
bRet = TRUE;
}
::SysFreeString(bstrClassid);
}
return bRet;
}
BHO框架可以参考这个
http://msdn.microsoft.com/en-us/library/bb250436.aspx
至于IHTMLDocument2接口的使用,可以参考这篇示例中的“Find an anchor on a web page“
http://www.codeproject.com/KB/shell/iehelper.aspx
对于插件而言,一般你用IHTMLDocument2的接口中的get_plugins(IHTMLElementCollection **p)
或者get_embeds(IHTMLElementCollection **p)得到一个元素集合,再利用这个集合去枚举其中的
元素IHTMLElement,如果这个元素是Embed,那么在IHTMLElement的QueryInterface接口中可以得到
IHTMLEmbedElement的接口指针,然后再调用这些指针的对应方法去获取属性值。具体可以看这些接口的
使用。其它用法类似,就是根据元素的特征去调用相应的接口和方法。
插件可以有很多种...
常见的MIMETYPE可以看这里http://www.mimetype.org/
脚本一般都是javascript
额..我对这东西也是刚学的阶段,没有什么成熟的代码和框架
你再参考下这个好了,不要着急,多看代码了解和学习,另外,对BHO和异步可插入协议的代码编写,需要了解些COM的知识,这样对代码理解有帮助.
http://topic.csdn.net/u/20080908/16/e7c6cc3f-ae78-454f-8b74-b1234d196b3f.html
MSDN异步可插入协议的实现过程:http://msdn.microsoft.com/en-us/library/aa767916.aspx
CodeProject上有个很强大的示例,但是不清楚怎么把它应用到BHO中...http://www.codeproject.com/KB/atl/vbmhwb.aspx
一般有两种方法吧:
1)监控某种协议,比如HTTP, HTTPS. 就IE而言,就是过滤它每次发起的HTTP连接头信息,从它的Response中得到Request连接的数据类型(字段为Content-Type)
2)监控IE下载指定的MimeType时的连接,就是只在符合某种资源类型时做操作,比如 text/xml
总得来说需要实现一个协议过滤器,具体继承与实现的接口根据需要来定.
http://www.cnblogs.com/boringlamb/articles/1113269.html
看那一下了,我也学习学习了
关键字找mimefilter即可,有很多样例
不过我对其中的URL Request比较感兴趣,目前也在学习这个....
如果楼主找到这方面URL Request方面的东西,记得分享下,呵呵...