zoukankan      html  css  js  c++  java
  • IE的BHO通过IHTMLDocument2接口获得网页源代码

    参考了凤之焚的专栏:http://blog.csdn.net/lion_wing/article/details/769742

    但是他的源码有些问题,即IHTMLElementCollection接口的item应该填写正确的序列号,而不是0。

    item序列号递增是深度优先的遍历标签,不明白的可以试一下,也就是说如果只用0序列号的话获得的是<!Document>的标签,1才是<html>标签内容,他俩是并列的。我这里是IE11做的实验,博主当年发文的时候不知道情况怎么样……

    另外注意要使用IHTMLElement的outerHTML,innerHTML只会获得标签里的内容,不包含标签。

    int detect_AppCache(IHTMLDocument2* pDocument)
    {
    	CComPtr<IHTMLElementCollection> spHTML;
    	HRESULT hr = pDocument->get_all(&spHTML);
    	long length = 0;
    	spHTML->get_length(&length);
    
    	if (hr == S_OK && spHTML != NULL) {
    		for (int i = 0; i < length ; i++){//注意一下,这里i=1就可以获得普遍意义的所有源代码
    			CComVariant svarIndex = i;
    			CComVariant svarEmpty;
    			CComPtr<IDispatch> spDisp;
    
    			hr = spHTML->item(svarIndex, svarEmpty, &spDisp);
    			if ( SUCCEEDED(hr) ) {
    				CComQIPtr<IHTMLElement> spElement = spDisp;
    				if (spElement) {
    					CComBSTR bstrHTML; 
    					spElement->get_outerHTML(&bstrHTML);
    					USES_CONVERSION;
    					CString ret = COLE2T(bstrHTML);
    					if (ret.Find(_T("appcache")) != -1) {
    						MessageBox(NULL, L"he", L"detect_AppCache", MB_OK);
    						
    					}
    					MessageBox(NULL, ret, L"detect_AppCache", MB_OK);
    				}
    
    			} else {
    				MessageBox(NULL, L"获取IDispatch失败", L"detect_AppCache", MB_ABORTRETRYIGNORE);
    			}
    		}
    	}
    	return 0;
    }
    
  • 相关阅读:
    思考c++编程-译自c++ programming language 1.7节
    对于(学习c++)的c程序员的建议
    输入框字数统计效果
    去掉tppabs冗余代码
    分享JS实现IE6 PNG完全透明(包括背景图片)
    系统启动过程
    VBP结构介绍
    python的xml文件操作
    javascript实现手动调整下拉列表框
    javaScript实现从一个下拉列表到另一个下拉列表
  • 原文地址:https://www.cnblogs.com/ascii0x03/p/4545898.html
Copyright © 2011-2022 走看看