开发IE下js使用的com组件,包含事件处理
2015-01-06 23:07
405 查看
很简单,将事件做成属性,并设置属性的bindable, displaybind标记。
在js下面直接将function传给这个属性,com组件里面调用这个IDispatch的函数即可。
idl文件,注意onevent1这里。
部分实现代码
测试例子
在IE中刷新这个页面,在控制台里面能看到效果。
不过,现在会提示ActiveX安全性问题。在ATL技术内幕这本书里面有讲到怎么不让它提示,现在找不到在哪里了,等以后看到了再补上吧。
在js下面直接将function传给这个属性,com组件里面调用这个IDispatch的函数即可。
idl文件,注意onevent1这里。
import "oaidl.idl"; import "ocidl.idl"; [ object, uuid(6A6140E8-9356-4FBD-B0FD-04508D336B17), dual, nonextensible, pointer_default(unique) ] interface IComClassTest : IDispatch{ [id(1)] HRESULT Method1(BSTR arg1); [propget, id(2), bindable, displaybind] HRESULT onevent1([out, retval] VARIANT* pVal); [propput, id(2), bindable, displaybind] HRESULT onevent1([in] VARIANT newVal); }; [ uuid(97157E1C-637C-4962-B069-96E70F572A99), version(1.0), ] library ATLProject3Lib { importlib("stdole2.tlb"); [ uuid(14D66A8E-899E-4A72-A2FD-3F9720BD1DF7) ] dispinterface _IComClassTestEvents { properties: methods: }; [ uuid(887AF328-699E-4750-8FE7-F3D715CA7983) ] coclass ComClassTest { [default] interface IComClassTest; [default, source] dispinterface _IComClassTestEvents; }; };
部分实现代码
STDMETHODIMP CComClassTest::Method1(BSTR arg1) { // TODO: 在此添加实现代码 if (m_onevent1) { DISPPARAMS params = { nullptr, nullptr, 0, 0 }; m_onevent1.Invoke0((DISPID)0); } return S_OK; } STDMETHODIMP CComClassTest::get_onevent1(VARIANT* pVal) { // TODO: 在此添加实现代码 pVal->vt = VT_DISPATCH; V_DISPATCH(pVal) = m_onevent1; return S_OK; } STDMETHODIMP CComClassTest::put_onevent1(VARIANT newVal) { // TODO: 在此添加实现代码 m_onevent1 = V_DISPATCH(&newVal); return S_OK; }m_onevent是CComDispatchDriver对象。
测试例子
<html> <body> <script type="text/javascript"> var t = new ActiveXObject("ATLProject3.ComClassTest"); t.onevent1 = function() { console.log("sdfsdfsdf"); } t.Method1("123"); </script> </body> </html>
在IE中刷新这个页面,在控制台里面能看到效果。
不过,现在会提示ActiveX安全性问题。在ATL技术内幕这本书里面有讲到怎么不让它提示,现在找不到在哪里了,等以后看到了再补上吧。
相关文章推荐
- 使用.NET语言开发Silverlight应用程序入门(五):事件处理
- 转:用ATL库开发COM组件常见的几个问题 (ie不响应事件,解决悲剧的方法)
- js中ie与标准dom的区别——事件处理
- Node.js中处理异步编程(使用回调处理一次性事件,使用事件监听器处理重复性事件)
- js处理ie关闭事件
- iOS开发--QQ音乐练习,旋转动画的实现,音乐工具类的封装,定时器的使用技巧,SliderBar的事件处理
- 使用JS开发IE、360浏览器、chrome浏览器插件
- <WEB>平板_手机开发_13 个处理触摸事件和多点触摸的JS 库
- 使用js事件机制进行通用操作&特定业务处理的协调
- 使用 Apache OpenJPA 开发 EJB 3.0 应用- 处理实体生命周期事件的回调
- js火狐以及ie处理鼠标进入与离开事件
- js使用函数绑定技术改变事件处理程序的作用域
- ie的开发者工具在页面包含iframe,且src不同域时,由打开开发工具而触发的js错误提示
- 使用prototype.js的事件处理方法
- Asp.net开发心得点滴[动态加载的用户控件使用事件委托,交给页面处理的事件无效问题]
- 使用 Apache OpenJPA 开发 EJB 3.0 应用,第 6 部分: 处理实体生命周期事件的回调
- js火狐以及ie处理鼠标进入与离开事件
- [Android开发]使用ViewPagerIndicator开源库处理其中事件分发机制
- ios实例开发精品文章推荐(8.12)11个处理触摸事件和多点触摸的JS库
- <WEB>平板_手机开发_13 个处理触摸事件和多点触摸的JS 库