ActiveX异步回调JavaScript(通过事件方式) .
来源:互联网 发布:cad for mac打不开 编辑:程序博客网 时间:2024/05/01 01:03
版权声明
请尊重原创作品。转载请保持文章完整性,并以超链接形式注明原始作者“tingsking18”和主站点地址,方便其他朋友提问和指正。
以前是用的事件机制来调用JavaScript,事件和回调本来就是一回事。但是由于没有解决线程同步问题,所以就一直没有调通。JavaScript中死活也不响应异步发送过来的事件。前天用Idispatch接口调通了JavaScript。但是始终觉得不是那么回事,这样会麻烦死的。
于是回过头来思考,用事件是不是只要线程同步一下就可以了?今天早上试了一下,果然没有问题。
下面介绍一下具体的步骤:
1. 建立MFC ActiveX Control(方法略)
2. 在ClassWizard automation页添加方法invoke。Invoke函数代码如下:
void CForthCtrl::invoke(short a)
{
m_a = a;
_beginthread(f, 0, (void*)(this));
}
3. 在上面的invoke方法中调用了线程函数f,在f函数中要调用界面控件CforthCtrl,所以必须进行线程同步,我们使用了PostMessage方法同步 (以前就是忽略了这里,所以才调不通JavaScript的) 。f函数的代码如下:
void f(void * r)
{
CForthCtrl* p = (CForthCtrl*)r;
Sleep(5000);
p->m_a +=10;
PostMessage(p->m_hWnd,WM_THREADFIREEVENT,(WPARAM)NULL,(LPARAM)NULL);
return;
}
4. 在ClassWizard ActiveX Events页添加事件calljs,事件的参数为short类型的参数,用于将结果传递到JavaScript中去。
5. 添加WM_THREADFIREEVENT消息的消息映射函数。代码如下:
LRESULT CForthCtrl::OnFireEventForThread(WPARAM wParam, LPARAM lParam)
{
this->FireCalljs(m_a);
return TRUE;
}
6. 用ActiveX Control Test Container测试一下。看看调用invoke的时候会不会触发calljs事件。
7. 打开Microsoft ActiveX Control Pad,插入我们刚刚编写的控件。然后添加调用invoke的按钮,并且添加响应Calljs函数的代码。
<HTML>
<HEAD>
<TITLE>New Page</TITLE>
</HEAD>
<BODY>
<SCRIPT LANGUAGE="JavaScript" FOR="Forth1" EVENT="calljs(param)">
alert(param);
</SCRIPT>
<script LANGUAGE="JavaScript">
function test()
{
Forth1.invoke(1);
}
</script>
<OBJECT ID="Forth1" WIDTH=100 HEIGHT=51
CLASSID="CLSID:52510A20-E949-4213-89FD-8A2AE5A7F6D4">
<PARAM NAME="_Version" VALUE="65536">
<PARAM NAME="_ExtentX" VALUE="2646">
<PARAM NAME="_ExtentY" VALUE="1323">
<PARAM NAME="_StockProps" VALUE="0">
</OBJECT>
<input type ="button" value="test" onclick="test();">
</BODY>
</HTML>
总结:
1. 使用事件机制比前面的方法省老鼻子劲了,少写多少代码啊。
2. 使用Idispatch接口还是很容易出错的,并且不容易查找错误。
3. 使用事件方式,只要用ActiveX Control Test Container调试成功了,放到web页面中去就没问题了。
4. 事件方式不用传函数名进去,直接在JavaScript中挂接事件就可以了。
5. 线程操作界面一定记得要同步啊!!!!!!
- ActiveX异步回调JavaScript(通过事件方式)
- ActiveX异步回调JavaScript(通过事件方式) .
- ActiveX异步回调JavaScript(通过事件方式)
- ActiveX异步回调JavaScript
- ActiveX异步回调JavaScript
- ActiveX异步回调JavaScript
- js---JavaScript中的事件委托/事件代理,如何通过事件委托进行异步DOM事件监听
- ActiveX多线程回调JavaScript
- ActiveX多线程回调JavaScript
- JavaScript 响应MFC ActiveX 事件
- 多线程 异步实现(通过事件驱动)
- Javascript函数与ActiveX事件关联
- [小结]Javascript中绑定ActiveX控件事件
- ATL实现ACTIVEX控件异步回调javascrip(未完再续)
- 异步回调(伪Ajax方式)
- 异步加载javascript的方式
- javascript事件小例子(利用ActiveX对象创建一个进度条)
- ajax的异步请求(javascript和xml)实现方式
- Android成长之路-Android组件_Spinner例子小解
- ActiveX异步回调JavaScript
- VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程
- MFC下的文档和视图以及框架之间的访问
- 如何用Javascript捕获ActiveX对象的事件
- ActiveX异步回调JavaScript(通过事件方式) .
- IT相关网站列表
- linux内核中链表的实现
- epoll 详解
- jquery实现网页抽奖程序
- GETBOUNDINGCLIENTRECT CAUSES 'UNSPECIFIED ERROR' IN IE7 AFTER AJAX in Jquery 1.4.2
- 用 Javascript 获取頁面大小、窗口大小和滾動條位置
- Job-oriented Student
- 代码对比