【问题标题】:How to insert input tag in web page using BHO VC++?如何使用 BHO VC++ 在网页中插入输入标签?
【发布时间】: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


【解决方案1】:

应该可以工作的代码:

void CRealBrowserBHO::setResponseCode(IDispatch *pDisp)
{
    HRESULT hr;
    CComPtr<IDispatch> spDispDoc;
    hr = m_spWebBrowser->get_Document(&spDispDoc);
    if (SUCCEEDED(hr) && spDispDoc)
    {
        CComPtr<IHTMLDocument2> spHTMLDoc;
        hr = spDispDoc.QueryInterface<IHTMLDocument2>( &spHTMLDoc );
        if (SUCCEEDED(hr) && spHTMLDoc) 
        {
            CComPtr<IHTMLElement> spBodyElmt;
            hr = spHTMLDoc->get_body(&spBodyElmt);
            if (SUCCEEDED(hr) && spBodyElmt)
            {
                CComBSTR inputElement( L"<input type='text' name='ResponseCode' value='200'/>" );
                hr = spBodyElmt->insertAdjacentHTML( CComBSTR( L"beforeEnd" ), inputElement);
            }
        }
    }
}

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-21
    • 2012-02-27
    • 2016-11-24
    • 2012-06-19
    • 2012-03-11
    • 2012-05-01
    • 2016-03-09
    • 1970-01-01
    相关资源
    最近更新 更多