用vc将js响应函数绑定到网页元素的办法一

        一个html网页,已经显示了一些内容。网页上已经用javascript写好了网页元素的各种响应函数。现在我需要根据内容的不同小范围的修改网页,利用IHTMLDocument2接口 vc可以很容易的添加各种网页元素并设置它们的值。但是在设置它们的响应函数时碰到困难了。

以设置Onclick为例,HRESULT IHTMLElement::put_onclick(VARIANT  v)和HRESULT attachEvent( BSTR  event,IDispatch * pDisp,VARIANT_BOOL * pfResult)都可以设置响应函数。但必须找到响应函数的IDispatch 。

msdn上有
HRESULT IHTMLDocument::get_Script(IDispatch **p);

可以获得script的IDispatch,再往下就只能用IDispatch的Invoke()来执行script中的函数。达不到目的。网上找了些相关的例子,都是采用的方法子类化IDispatch的方法。如下:
pClickEvent = new CClickEvent ;    //CClickEvent是自己实现的IDispatch子类
VARIANT vDocDisp;
vDocDisp.vt = VT_DISPATCH;
vDocDisp.pdispVal = pClickEvent ;
pDoc2->put_onclick( vDocDisp);

将自己写的响应函数体写入重载Invoke()函数就行了。
但这种方法的函数体实现是在vc中实现的,也与目标不符。

无数次的查看msdn,突然发现put_onclick的反面不是get_onclick么。
于是我在网页的开头添加了一个hidden元素
<input type=hidden id="substr" name="hiddenObject" value="" οnclick="clickhand()">
想到了吧,获取了hidden元素onclick响应函数不就是得到了其它网页元素的onclick响应函数了吗。下面是我的代码:
 if (m_pBrowser->get_Document( &spDispatch) != S_OK)
     return;
  spDispatch->QueryInterface(IID_IHTMLDocument3,(void**)&pDoc3);

 VARIANT vOnclick;
 BSTR bstrid = ::SysAllocString(L"substr");
 pDoc3->getElementById(bstrid,&pElement);

 pElement->get_onclick(&vOnclick);

 这样就获取了onclick的响应函数。
之后就简单啦,假设添加的网页元素是pAddElement,设置它的onclick响应函数只需 pAddElement->put_onclick(vOnclick);
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值