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

questionboy 2003-10-15 05:12:41
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;
}
}
}
}
}
}
}
}
}
}
...全文
357 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
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 ) )

questionboy 2003-10-16
  • 打赏
  • 举报
回复
Dear jiangsheng(蒋晟.Net)
我按照你提供的方法试过了,不成功,网页上的代码好像有问题,我没有时间自己研究流的东西了。
能否提供其他的方法?比如仅仅限定在IE对象的范围内?通过某些属性的设置或者对象的转化来达到我的目的?我看了MSDN中的所有例子,和网上的资料,没有用Vc+Ie对象来创建IHTMLScriptElement的例子,只有用javascript来实现的,而用javascript只需要调用文档类的createElement就可以了,返回的对象可自动cast成为自己需要的类型。而VC中就是不行
这到底是为什么?????
蒋晟 2003-10-16
  • 打赏
  • 举报
回复
try document.script.applyElement
蒋晟 2003-10-15
  • 打赏
  • 举报
回复
用PersistStream在文件末尾添加脚本看看
http://www.csdn.net/develop/read_article.asp?id=18465

Command what is yours
Conquer what is not

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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