Java bho插件,javascript-使用IE插件浏览器帮助器对象(BHO)访...

我正在开发IE8 BHO插件.现在,我只是想将文本插入另一个iframe(id =“ canvas_frame”)所包含的iframe(class =“ Al Ai Editable”)中.

我设法获得了要向其添加文本的iframe的IHTMLElement(class =“ Al Ai editable”).我可以通过类型为IHTMLElement的el变量来证明这一点:

el->get_className(&cl); //Al Ai editable

在MessageBox中正确显示iframe的类.

我现在遇到的问题是我无法访问相应iframe的body元素.

例如,当我尝试使用以下代码访问带有ID的iframe主体时,这将导致浏览器崩溃:

el->getElementById(L":d6", &el); // ":d6" is the id of the body inside the iframe

另外,尝试获取内部HTML或内部Text,我只是获得一个空字符串:

el->get_innerHTML(&htm);

MessageBox(hwnd, htm, L"BHO cl", MB_OK);

要么

el->get_innerText(&htm);

MessageBox(hwnd, htm, L"BHO cl", MB_OK);

不显示任何内容(“”).

我什至尝试了el-> get_children方法,但这也没有帮助.

这是整个功能:

void CgmailAdderBHO::checkIframes(HWND hwnd, IDispatch *lpDisp) {

USES_CONVERSION;

if (lpDisp) {

IOleContainer* pContainer;

// Get the container

HRESULT hr = lpDisp->QueryInterface(IID_IOleContainer,

(void**)&pContainer);

lpDisp->Release();

if (FAILED(hr)) {

return;

}

IEnumUnknown* pEnumerator;

// Get an enumerator for the frames

hr = pContainer->EnumObjects(OLECONTF_EMBEDDINGS, &pEnumerator);

pContainer->Release();

if (FAILED(hr)) {

return;

}

IUnknown* pUnk;

ULONG uFetched;

// Enumerate and refresh all the frames

for (UINT i = 0; S_OK == pEnumerator->Next(1, &pUnk, &uFetched); i++)

{

IWebBrowser2* pBrowser;

hr = pUnk->QueryInterface(IID_IWebBrowser2, (void**)&pBrowser);

pUnk->Release();

if (SUCCEEDED(hr))

{

// process the iframe

CComPtr docDisp;

pBrowser->get_Document(&docDisp);

CComQIPtr doc = docDisp;

CComQIPtr iframes;

HRESULT hr = doc->getElementsByTagName(SysAllocString(L"body"), &iframes);

long length;

iframes->get_length(&length);

CComVariant itemIndex(0);

CComVariant empty;

CComQIPtr htmlEl;

iframes->item(itemIndex, empty, &htmlEl);

CComQIPtr el = htmlEl;

BSTR cl;

BSTR cln(L"cP");

el->get_className(&cl);

if (cl && strcmp(OLE2A(cl), "cP") == 0) {

//this is the canvas_frame

// check if it has any other subframes

BSTR html;

el->get_innerHTML(&html);

doc->getElementsByTagName(SysAllocString(L"iframe"), &iframes);

if (iframes) {

iframes->get_length(&length);

if (length > 0) {

//MessageBox(hwnd, L"We are on compose!", L"BHO", MB_OK);

//add encrypt button code here

iframes->item(itemIndex, empty, &htmlEl);

el = htmlEl;

el->get_className(&cl); //Al Ai editable

BSTR htm;

el->get_innerHTML(&htm);

MessageBox(hwnd, cl, L"BHO cl", MB_OK);

MessageBox(hwnd, htm, L"BHO cl", MB_OK);

CComQIPtr docul = htmlEl;

//docul->getElementById(L":d6", &el);

break; // found iframe ; now exit for

}

}

}

pBrowser->Release();

}

}

pEnumerator->Release();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值