`
buliedian
  • 浏览: 1259823 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

ActiveX异步回调JavaScript(通过事件方式)

阅读更多

版权声明

请尊重原创作品。转载请保持文章完整性,并以超链接形式注明原始作者“tingsking18”和主站点地址,方便其他朋友提问和指正。

以前是用的事件机制来调用JavaScript,事件和回调本来就是一回事。但是由于没有解决线程同步问题,所以就一直没有调通。JavaScript中死活也不响应异步发送过来的事件。前天用Idispatch接口调通了JavaScript。但是始终觉得不是那么回事,这样会麻烦死的。

于是回过头来思考,用事件是不是只要线程同步一下就可以了?今天早上试了一下,果然没有问题。

下面介绍一下具体的步骤:

1. 建立MFC ActiveX Control(方法略)

2. ClassWizard automation页添加方法invokeInvoke函数代码如下:

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. 线程操作界面一定记得要同步啊!!!!!!

分享到:
评论

相关推荐

    JavaScriptActiviX.zip

    "ActiveX异步回调JavaScript(通过事件方式)"指的是通过事件模型实现的通信方式。在ActiveX控件中定义一个事件,当特定条件满足(如任务完成)时,触发该事件。JavaScript端注册事件监听器,当事件发生时,监听器的...

    USB-ID通用免动动读卡器JavaScript示例源码.rar

    - 异步编程:RFID读卡器操作可能是异步的,需要理解回调函数、Promise或async/await语法。 - 安全性:ActiveX控件在现代Web开发中的安全问题,以及为什么它主要限于IE浏览器。 在实际应用中,由于ActiveX控件的安全...

    JavaScript中三种异步上传文件方式_.docx

    // 上传完成后的回调 function uploadFinished(fileName) { addToFlist(fileName); loading(false); } // 添加文件列表 function addToFlist(fname) { var temp = [", fname, "(\"" + fname + "\");'&gt;...

    JavaScript全集

    4. **异步编程**:回调函数、Promise、async/await,这些是解决JavaScript中回调地狱问题的关键技术。 5. **DOM操作**:通过JavaScript访问和修改HTML元素,包括选择元素(getElementById, getElementsByClassName,...

    js 访问dotnet control

    在JavaScript中,可以使用`setTimeout`或`setInterval`来模拟异步回调,但这种方式并不理想,因为它们可能会导致性能问题。更好的做法是使用.NET控件提供事件支持,当.NET执行完某个操作后触发事件,JavaScript端...

    javascript api 手册

    9. **异步编程**:包括回调函数、Promise、async/await,用于处理非阻塞I/O操作,是现代JavaScript开发的核心技能。 10. **错误处理**:通过try...catch块处理运行时错误,以及使用throw语句抛出自定义错误。 11. ...

    JavaScript中文手册+核心手册

    此外,还包括了作用域、闭包、原型链、异步编程(回调函数、Promise、async/await)等高级主题。理解这些内容能帮助开发者编写出高效且易于维护的代码。 2. **JavaScript核心参考手册**: 核心参考手册通常会更...

    JavaScript与JScript从入门到精通

    6. **异步编程**:JavaScript中的异步编程主要涉及回调函数、Promise和async/await。它们处理耗时操作,如网络请求,以避免阻塞主线程。 JScript与JavaScript的主要区别在于,JScript默认开启严格模式,而...

    javascript对象参考手册

    19. **异步编程**:包括事件循环、回调函数、async/await等处理异步任务的方式。 20. **模块系统**:讲解CommonJS、AMD、ES6模块以及它们在不同场景下的应用。 这本手册将是你掌握JavaScript对象和相关技术的宝贵...

    Javascript以及JScript帮助文档(chm格式)

    2. **函数**:函数定义、参数传递、回调函数、立即执行函数表达式。 3. **对象与原型**:对象创建、原型链、对象属性操作。 4. **DOM操作**:获取和修改HTML元素、事件处理、DOM遍历。 5. **AJAX**:XMLHttpRequest...

    JavaScript中三种异步上传文件方式

    - 主页面通过监听iframe的`onload`事件,获取服务器返回的数据,调用预先定义好的回调函数,如`uploadFinished`,从而更新用户界面。 以下是一个简单的示例代码: ```html &lt;!DOCTYPE html&gt; 隐藏的iframe上传...

    JavaScriptHelp中文

    2. 高级特性:闭包、原型链、作用域、异步编程(回调、Promise、async/await)。 3. BOM(Browser Object Model)和DOM操作:如何访问和操作浏览器窗口、文档、以及页面元素。 4. AJAX(异步JavaScript和XML):实现...

    javascript手册

    手册中可能还涵盖了变量作用域、闭包、异步编程(回调函数、Promise、async/await)、事件监听、AJAX请求、模板字符串、模块化(CommonJS、ES6模块)、正则表达式、数据类型与类型转换等JavaScript基础和高级主题。...

    Vc++编写ocx异步调用dll

    本文将详细讲解如何使用VC++编写一个OCX控件,以实现异步调用DLL,并通过回调函数来防止网页卡死。 首先,我们需要了解OCX和DLL的基本概念。OCX是ActiveX控件的一种形式,它是可重用的软件组件,可以在不同的应用...

    html调用python,python回调结果给html.zip

    总结来说,这个示例展示了如何通过HTML使用JavaScript调用Python脚本,然后让Python将处理结果回调给HTML。虽然ActiveX技术在现代Web开发中已较少使用,但通过Ajax或者Web框架如Flask、Django等,我们可以实现安全、...

    原生javascript实现的ajax异步封装功能示例

    在页面加载完成后(`window.onload`事件发生后),通过JavaScript代码获取了页面中的按钮,并为其绑定了点击事件,当按钮被点击时调用`ajax`函数,并传入了请求的URL、成功回调函数和失败回调函数。在成功回调函数中...

    ActiveQtServer

    5. **AJAX异步请求回调**:在Web端,使用JavaScript的AJAX技术向C++服务器发送异步请求,服务器端接收到请求后,通过回调函数返回结果,实现页面的无刷新更新。 这些回调机制的实现,都基于ActiveQtServer中的...

    FoxitPDF SDK ActiveX 5.2 开发文档 中文版 Chinese

    7. 事件:事件是指控件在执行某些操作时触发的回调,开发者可以在这些事件发生时执行特定的代码。文档中列出的事件包括BeforeDraw(绘制前)、AfterDraw(绘制后)、OnZoomChange(缩放改变时)等。 8. IPDFPrinter...

    ajax异步调用

    2. **设置回调函数** - 当服务器响应状态发生变化时,`onreadystatechange`事件会被触发。通常情况下,只有当`readyState`为4(表示请求完成)且`status`为200(表示成功获取到数据)时,才会处理服务器返回的数据...

Global site tag (gtag.js) - Google Analytics