比如要读一个‘插件’的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属性?
<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属性?
HRESULT hr = pElem2->getAttribute(CComBSTR("align"),0,&vs2);
if (hr != S_OK)
{
GetLastError();// 看看有没有错误
}另外vs2参数有没有问题?
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);
}
<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);
}
有没有比如IHTMLDOMNode等其他安全方法,可读元素属性的源代码?
将sa=(CString)vs2.bstrVal; 改为sa.Format("%ld",vs2.iVal);则正常,别的属性两个都可读EMBED插件的还是读不到,
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属性,则程序立即出错终止
}
}
}
}