activex js,允许activex控件交互
4.实现从ActiveX调用网页中的javascript。
设计思路:从上面项目中生成的calc.html创建一个Js函数来调用控件的CallWebJs方法,CallWebJs方法调用页面中的js方法printMsg();
具体操作如下:和3一样,为控件添加一个名为CallWebJs的方法,
在calc.cpp中找到这个方法,并按如下方式实现它:
STDMETHODIMP Ccalc:call webjs(VARIANT script callback)
{
//TODO:在此添加您的实现代码
CComPtr IDispatch spCallback
if(script callback . VT==VT _ DISPATCH)
sp callback=script callback . pdispval;
CComVariant avar params[1];
avar params[0]= hhheeee ;//指定回调函数的参数
DISPPARAMS params={ avarParams,NULL,1,0 }。
if(spCallback)
spCallback- Invoke(0,
IID空,
区域设置_用户_默认,
分派_方法,
params,NULL,NULL,NULL);
返回S _ OK
}
在calc.html中添加call按钮,并修改html文件,如下所示:
超文本标记语言
头
对象计算/标题的标题ATL 8.0测试页
/头
身体
OBJECTID= calc classid= CLSID:4a 524 b 99-8 caf-44e 9-B788-70536908 f048 /OBJECT
inputtype=buttonvalue=Add /
input type= button value= call webjs /
scripttype=text/javascript
函数add() {
var calc=document . getelementbyid( calc );
var结果=calc。添加(2,3);
警报(结果);
}
功能测试(){
var Calc=document . getelementbyid( Calc );
varresult=calc。call web js(printMsg);
}
函数printMsg(msg) {
警报(消息);
}
/脚本
/BODY
/HTML
点击页面中的CallWebJs按钮,看到效果,通过ActiveX回调Js。
注意:
楼是新来的。他只是记录了自己的问题。请大家批判性阅读,如有错误请指出:-)。文章前回调函数的参数在js中指定,会造成调用后scriptCallback.vt类型不正确,从而导致Invoke无法触发。现在,参数是在回调函数中指定的。另外,不推荐这种回调方法。使用这种方法不太灵活,尤其是在参数的指定方面。最好使用事件触发的方法,在ActiveX中创建事件和事件函数,由js绑定。后续文章会详细介绍,也可以网上搜。