如何在VC中使用IHTMLDocument2::createElement()函数创建一个 IHTMLScriptElement?

questionboy 2003-10-15 05:12:07
IHTMLDocument2::createElement()函数可以创建一个新的IHTMLElement,但是我在创建一个IHTMLScriptElement的时候却遇到了问题。虽然使用“script”关键字创建了一个新的element,但是它并不是一个IHTMLScriptElement,这是为什么?代码如下:
IHTMLElementCollectionPtr pColl;
if( m_pDoc2 != 0 && S_OK == m_pDoc2->get_all( &pColl ) )
{
long l;
if( S_OK == pColl->get_length( &l ) )
{
for( long i=0; i<l; i++ )
{
VARIANT vt;
vt.vt = VT_I4;
vt.lVal = i;
IDispatchPtr pDis;
if( S_OK == pColl->item( vt, vt, &pDis ) )
{
CComBSTR str;
IHTMLDOMNodePtr pNode = pDis;
if( pNode )
{
if( S_OK == pNode->get_nodeName( &str ) )
{
IHTMLElementPtr pEle;
//获取body element
if( str == CComBSTR("BODY") || str == CComBSTR("body") )
{
//创建一个script关键字的element
if( S_OK == m_pDoc2->createElement( L"script", &pEle ) )
{
IHTMLDOMNodePtr p = pEle;
if( p )
{
IHTMLDOMNodePtr pReturn;
//将新的element插入到body最后
if( S_OK == pNode->appendChild( p, &pReturn ) )
{
break;
}
}
}
}
}
}
}
}
}
}
...全文
329 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
questionboy 2003-10-17
  • 打赏
  • 举报
回复
感谢大家,是我调用有问题,应该如下调用
CComBSTR str("script");
m_pDoc2->createElement( str, &pEle ) );
IHTMLScriptElementPtr p = pEle;
assert( p != 0 );
我在调用createElement的时候第一个参数传递有问题。
m_pDoc2->createElement( L"script", &pEle ) )

yzxlyd 2003-10-17
  • 打赏
  • 举报
回复
up
saucer 2003-10-17
  • 打赏
  • 举报
回复
should work, look here (in Japanese, but you read the code):

http://member.nifty.ne.jp/LILILIN/HOWTO/activex_javascript.htm

or use document's get_scripts methods
questionboy 2003-10-16
  • 打赏
  • 举报
回复
如果能够这样直接转换我就不用愁了
yonghengdizhen 2003-10-15
  • 打赏
  • 举报
回复
它返回的是一个IHTMLElement 接口
你应该调用IHTMLElement::QueryInterface
并要求获得IHTMLScriptElement接口
如果对象实现了该接口将返回对应的接口指针并返回S_OK
否则将返回E_NOINTERFACE

87,904

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧