【发布时间】:2013-11-08 06:10:54
【问题描述】:
我在 VC++ 中创建了一个 BHO,参考下面的链接
http://msdn.microsoft.com/en-us/library/bb250489%28v=vs.85%29.aspx
现在我需要在页面加载完成时添加输入标签,我尝试使用以下代码
void STDMETHODCALLTYPE CTestBHO::OnDocumentComplete(IDispatch *pDisp, VARIANT *pvarURL)
{
if (SUCCEEDED(hr))
{
responseCode=200;
setResponseCode(pDisp);
}
}
void CRealBrowserBHO::setResponseCode(IDispatch *pDisp)
{
HRESULT hr = S_OK;
CComPtr<IDispatch> spDispDoc;
hr = m_spWebBrowser->get_Document(&spDispDoc);
if (SUCCEEDED(hr))
{
BSTR inputElement=L"<input type=\"text\" name=\"ResponseCode\" value=\"200\">";
IHTMLElement *pTRElmt = NULL;
CComQIPtr<IHTMLDocument2> spHTMLDoc = spDispDoc;
HRESULT hr1=spHTMLDoc->get_body(&pTRElmt);
if (spHTMLDoc != NULL)
{
HRESULT hr=pTRElmt->insertAdjacentHTML(L"beforeEnd",inputElement);
}
}
}
但我的网页上没有插入标签。
出了什么问题,请指出我在这里错过了什么
谢谢, 拉马钱德兰。
【问题讨论】:
-
请指出哪些调用失败。最后一小时的值是多少?
-
另外,在 OnDocumentComplete 正文中对 hr 的测试是什么?这里没有 HRESULT...
-
最后,不要存储或传递不是 BSTR 的 BSTR。使用 CComBSTR InpEl( L"
); 和 insertAdjacentHTML( CComBSTR( L"beforeEnd") ,inpEl); -
@manuell 非常感谢您的帮助 :) 。但是当我将输入类型从“文本”更改为“隐藏”时,我面临另一个问题,我无法在 html 源代码中找到输入标签(右键单击 -> 查看源代码)可能是什么原因?
-
我目前正在使用 IE9,可以向您保证,通过 BHO 和 insertAdjacentHTML 添加的 HTML 元素在“查看源代码”中不可见,“文本”或“隐藏”在这方面并不重要。如果您的 IE 版本不是太旧,您可以使用“开发工具”(IE9 中的 F12)查看实时 HTML
标签: internet-explorer visual-c++ bho