发新话题
打印

FAQ:如何动态创建并访问网页元素

FAQ:如何动态创建并访问网页元素

  问========================================

你好:

在你的博客上看到了一些关于操作Internet Explorer的代码,有个问题请教
目的:在html页面中创建一个控件,程序动态创建。
我已经获得要创建页面的IHTMLDocument2指针,看msdn提示使用createElement函数调用后能够创建以及设置属性,创建为一个element我如何把它设置为一个对象或者applet对象或一个embed对象
我调用原有页面上的控件发现为一个applet对象,以下为动态创建的函数:
void InsertElement(IHTMLDocument2 * pIHTMLDocument2 )
{
HRESULT hr;
IHTMLElement *pHtmlElement = NULL;

CComBSTR bstrTitle = L"applet";

pIHTMLDocument2->createElement(bstrTitle,

TOP

  CComBSTR bstrName = L"name";
vRet.bstrVal = L"myocx1";
hr = pHtmlElement-> setAttribute (bstrName, vRet);
if ( FAILED( hr ) )
{
cout << _T("setAttribute错误") << endl;
return;
}
//如果创建applet对象,是否需要其他的属性或者设置,其他方法????
。。。
}

答========================================

创建Element之后,应通过IHTMLDOMNode::insertBefore或IHTMLDOMNode::appendChild把元素添加到DOM树中去,所以代码本来应该是这样的:

LPDISPATCH lpDisp = GetHtmlDocument();
if (lpDisp)
...{
CComQIPtr spDoc(lpDisp);
if ( spDoc )
...{
CComPtr spElem;
HRESULT hr = spDoc->createElement(L"applet",

TOP

  CComPtr pNewChild(pElem);
CComPtr pRefChild;
hr = pBodyNode->appendChild(pNewChild,

TOP

  看来我们只能用另外一种办法了——insertAdjacentHTML,如下:

LPDISPATCH lpDisp = GetHtmlDocument();
if (lpDisp)
...{
CComQIPtr spDoc(lpDisp);
if ( spDoc )
...{
CComPtr spBodyElem;
HRESULT hr = spDoc->get_body(

TOP

发新话题