比如要读一个‘插件’的align属性。(IHTMLEmbedElement里边没有提供get_align函数)//-----------
<embed width="128" height="128" src="file:///G:/Documents%20and%20Settings/Owner/My%20Documents/8.htm" align="center">
//*********************使用IHTMLElement,
pElem2->getAttribute(CComBSTR("align"),0,&vs2)并不能读出.
//**********************如何能读出这个插件的align属性?

解决方案 »

  1.   

    Try getAttributeNode method。
      

  2.   

    看一下返回值
    HRESULT hr = pElem2->getAttribute(CComBSTR("align"),0,&vs2);
    if (hr != S_OK)
    {
        GetLastError();// 看看有没有错误 
    }另外vs2参数有没有问题?
      

  3.   

    CString sa;
    CComVariant vs2;
    //---------------------------------------------------//读EMBED插件的(<P><EMBED width=128 height=128 align="middle"></P>)
    ,没有错误,进去S_OK里但读不到,
    if(pElem2->getAttribute(CComBSTR("align"),0,&vs2)==S_OK)//kk
    {
    if(VT_NULL!=vs2.vt)
    {
    sa=(CString)vs2.bstrVal;
    sa.TrimLeft();MessageBox(sa,"提示");//---------------------
    }
    }
    else
    {
    DWORD dwError = ::GetLastError(); 
    CString str; 
    str.Format(_T("Error Code :[%d]"), dwError); 
    AfxMessageBox(str); 
    }
      

  4.   

    还有读applet 小程序的//-----------------<applet code="SearchToHTML.class" width=360 height=100 codebase="..." hspace=55 vspace=88 align="absmiddle">
      <param name="files" value="...">
      <param name="target" value="main">
    </applet>//-------------------这段代码是程序直接崩溃。
    CString sa; 
    CComVariant vs2; if(pElem2->getAttribute(CComBSTR("vspace"),0,&vs2)==S_OK)//垂直间距
    {
    if(VT_NULL!=vs2.vt)
    {
    sa=(CString)vs2.bstrVal;
    sa.TrimLeft(); MessageBox("3。"+sa,"提示");
    m_edi10.SetWindowText(sa);
    }
    }
    }
    catch(...)
    {
    DWORD dwError =::GetLastError(); 
    CString str; 
    str.Format(_T("Error Code :[%d]"), dwError); //%D为0
    AfxMessageBox(str); 
    }
      

  5.   

    如果元素所属专门的xxxElement里有读自己属性的函数,好象用IHTMLElement的getAttribute函数也能直接读到,但xxxElement里没有的,再用IHTMLElement的getAttribute去读,就容易出错。
    有没有比如IHTMLDOMNode等其他安全方法,可读元素属性的源代码?
      

  6.   

    找到一点读applet 小程序的 
    将sa=(CString)vs2.bstrVal; 改为sa.Format("%ld",vs2.iVal);则正常,别的属性两个都可读EMBED插件的还是读不到, 
      

  7.   


    Try getAttributeNode method
    //*............get_nodeName能读,我的程序中每用get_nodeValue(&vs2)便立即出错终止
    //----------------------CComPtr<IHTMLElement4> pEl4;
    pElem2->QueryInterface(&pEl4);
    if(pEl4==NULL)return 0;
    CComPtr<IHTMLDOMAttribute> domatt;
    pEl4->getAttributeNode(CComBSTR("align"),&domatt);
    if(domatt==NULL)return 0;if(domatt->get_nodeName(&bs)==S_OK)
    {
    sa=(CString)bs;MessageBox(sa,"提示");//能读到
    if(sa.CompareNoCase("align")==0)
    {
    if(domatt->get_nodeValue(&vs2)==S_OK)
    {
    if(VT_NULL!=vs2.vt)
    {
    sa=(CString)vs2.bstrVal;
    sa.TrimLeft();MessageBox(sa,"提示");//如果网页中没有align属性,则程序读不到数据
                                             //运行正常;如果网页中有align属性,则程序立即出错终止
             }
    }
    }
    }