WebBrowser 中遍历所有的frames
枚举所有iframe的IWebBrowser2
// Get the IDispatch of the document.
//
LPDISPATCH lpDisp = NULL;
lpDisp = m_webBrowser.GetDocument(); if (lpDisp)
{
IOleContainer* pContainer; // Get the container.
//
HRESULT hr = lpDisp->QueryInterface(IID_IOleContainer,
(void**)&pContainer);
lpDisp->Release(); if (FAILED(hr))
return hr; // Get an enumerator for the frames.
//
IEnumUnknown* pEnumerator; hr = pContainer->EnumObjects(OLECONTF_EMBEDDINGS, &pEnumerator);
pContainer->Release(); if (FAILED(hr))
return hr; IUnknown* pUnk;
ULONG uFetched; // Enumerate and refresh all the frames.
//
for (UINT i = ; S_OK == pEnumerator->Next(, &pUnk, &uFetched); i++)
{
// QI for IWebBrowser here to see whether we have
// an embedded browser.
IWebBrowser2* pWebBrowser; hr = pUnk->QueryInterface(IID_IWebBrowser2, (void**)&pWebBrowser);
pUnk->Release(); if (SUCCEEDED(hr))
{
// Refresh the frame.
pWebBrowser->Refresh();
pWebBrowser->Release();
}
} pEnumerator->Release();
}
枚举所有iframe的element
HRESULT hr = S_OK;
try
{
CComPtr<IDispatch> spDispDoc;
hr = m_spWebBrowser->get_Document(&spDispDoc);
// find all iframe elements and filter by id, then insert ad js
CComQIPtr<IHTMLDocument2> spDoc2 = spDispDoc;
if(spDoc2){
CComQIPtr<IHTMLElementCollection> spAll;
hr = spDoc2->get_all(&spAll);
if (SUCCEEDED(hr)) {
CComPtr<IDispatch> spDispObjects;
// just handle iframes as example
CComVariant varTag = _T("IFRAME");
varTag.vt = VT_BSTR;
hr = spAll->tags(varTag, &spDispObjects);
if(SUCCEEDED(hr))
{
CComQIPtr<IHTMLElementCollection> spElementCollection = spDispObjects;
long lObjectCount = ;
if( spElementCollection )
hr = spElementCollection->get_length(&lObjectCount);if (SUCCEEDED(hr) && lObjectCount > )
{
for (int i = ; i < lObjectCount; i++)
{
CComVariant vIndex = i;
CComVariant vEmpty;
CComPtr<IDispatch> spdispObject;
hr = spElementCollection->item(vIndex, vEmpty, &spdispObject);
if (SUCCEEDED(hr))
{
CComQIPtr<IHTMLElement> spElement = spdispObject;
if (spElement)
{
CComBSTR bstrId = _T("");;
long width = , height = ;
spElement->get_id(&bstrId);
spElement->get_offsetHeight(&height);
spElement->get_offsetWidth(&width);
if(!IsAcceptableSize(width, height))
continue;
CComVariant vSrcUrl = _T("");
hr = spElement->getAttribute(_T("src"), 0, &vSrcUrl);
} } } } } } } } catch(_com_error &ex) { LPCTSTR errMsg = ex.ErrorMessage(); WriteLog(_T("_com_error: ") + CString(errMsg)); } return hr;
WebBrowser 中遍历所有的frames的更多相关文章
- webBrowser中操作网页元素全攻略
原文 webBrowser中操作网页元素全攻略 1.获取非input控件的值: webBrowser1.Document.All["控件ID"].InnerText; 或webBr ...
- Java中遍历Map集合的四种方法
在Java中如何遍历Map对象 How to Iterate Over a Map in Java 在java中遍历Map有不少的方法.我们看一下最常用的方法及其优缺点. 既然java中的所有map都 ...
- 关于delphi点击webbrowser中任意一点的问题
关于delphi点击webbrowser中任意一点的问题 有时候我们需要delphi载入webbrowser1打开网页的时候 需要点击某一个点的位置 可能是坐标 可能是按钮 可能是其他的控件应该如何来 ...
- java 中遍历hashmap 和hashset 的方法
一.java中遍历hashmap: for (Map.Entry<String, Integer> entry : tempMap.entrySet()) { String ...
- 在 Django 模板中遍历复杂数据结构的关键是句点字符
在 Django 模板中遍历复杂数据结构的关键是句点字符 ( . ). 实例二 mysit/templates/myhtml2.html修改如下 <!DOCTYPE html> <h ...
- C#:WebBrowser中伪造referer,为何对流量统计器无效?
使用webbrowser伪造referer的方法:webBrowser1.Navigate(url, "_self", null, "Referer:http://www ...
- Freemarker中遍历List以及内置函数使用
在Freemarker应用中经常会遍历List获取需要的数据,并对需要的数据进行排序加工后呈现给用户. 那么在Freemarker中如何遍历List,并对List中数据进行适当的排序呢?一. Free ...
- asp.net中遍历界面上所有控件进行属性设置
* 使用方法: * 前台页面调用方法,重置: protected void Reset_Click(object sender, EventArgs e) { ...
- Java中遍历Map的几种方法
转自: http://blog.csdn.net/wzb56/article/details/7864911 方法分为两类: 一类是基于map的Entry:map.entrySet(); 一类是基 ...
随机推荐
- [HTML5]label标签使用以及建议
for 属性规定 label 与哪个表单元素绑定. 隐式和显式的联系 标记通常以下面两种方式中的一种来和表单控件相联系:将表单控件作为标记标签的内容,这样的就是隐式形式,或者为 <label&g ...
- linux知识
1. linux dns配置文件为 /etc/resolv.conf nameserver 114.114.114.114 国内常用(而国外常用8.8.8.8) 2. Linux 服务器名词与p ...
- 查看并更改mysql编码
show variables like 'character%'; set character_set_client=utf8 ; set character_set_connection=utf8 ...
- day01-02--数据库概念介绍
什么是数据库呢?是存放数据的仓库.这个仓库比较特殊--它是按照一定的数据结构来组织.存储的.当然,我们也需要管理仓库中的货物--我们通过数据库提供的多种方法来管理数据库里的数据. 来自为知笔记(Wiz ...
- Mono addin 学习笔记 1
Mono Addin是一个开源的插件框架,其主要支持的特性如下: The main features of Mono.Addins are: Supports descriptions of add- ...
- inline-block和block的区别
<html> <head> <style> body,ul,li,span{padding:0px;margin:0px;} </style> < ...
- Flex 加载tiff
gis系统常常要加载tiff,因为好多土地证书,各种文件都是扫描件,如果你是用as来写的前台,怎么加载呢,顺便说下用插件AlternaTIFF也是可以得不过浏览器加载这么多插件是不太好的. 首先TIF ...
- javascript的replace+正则 实现ES6的字符串模版
采用拼接字符串的形式,将 JSON 数据嵌入 HTML 中.开始时代码量较少,暂时还可以接受.但当页面结构复杂起来后,其弱点开始变得无法忍受起来: 书写不连贯.每写一个变量就要断一下,插入一个 + 和 ...
- Java利用aspose-words将word文档转换成pdf(破解 无水印)
首先下载aspose-words-15.8.0-jdk16.jar包 http://pan.baidu.com/s/1nvbJwnv 引入jar包,编写Java代码 package doc; impo ...
- 第一零二天上课 PHP TP框架 引入文件路径问题和调用验证码的方式
外部文件引入到视图模板的方式 1,将外部文件放在Public文件夹下,用load标签引入 2,在模板出书写引入代码(方法有很多,只有以下方法不容易出问题) <load h ...