OCX 与 JS 互调详解


首先我们观察一下项目的结构,方便后面操作
结构
如上 类视图以及其他视图都可以从下图中找到答案
视图
注意这个 类视图后面创建OCX 的Event事件要用到。

JS调用OCX

到上图的类视图 点添加事件
右键
输入参数名,点添加自动生成代码
给JS调用
创建调度映射,让外部JS能够识别并调用
创建调度映射
来到Ctrl.h文件中添加枚举标志
添加ID
调试

// 给JS调用
int CMFCActiveXControl1Ctrl::beCallByJs(int param)
{
	MessageBox(_T("给JS调用"));
	return 10;
}

JS中

function test3(param)  
{  
   document.getElementById("jssTest1").beCallByJs(1);  
}  

OCX调用JS

添加事件,跟上面一样打开类视图
添加事件
这里是用VS2013添加的,VS2017点添加会提示必须加入Event的问题,比较奇葩。
事件
idl中的事件申明
事件申明
ctrl.h中实现
ctrl中实现
不过不要慌,这些都是自动生成的,当然看下也好,玩意什么时候要自己动手呢。

调用

CallJSBackEvent(_T("草泥马"));

JS响应
方式一:attachEvent

window.onload =function(){
	alert("加载完毕,加载ocx事件");
	document.getElementById("jssTest1").attachEvent("CallJSBackEvent",test2); 		}
function test2(param)  {  
        alert("事件回传"+param)
}  

方式二:script

<script language="javascript" for="jssTest1" event="CallJSBackEvent(p)" type="text/javascript"> 
	//alert("回调函数发现:" + p); 
	test2(p);
</script>

注意

注意一、
edge
使用Edge的话attachEvent是不生效的
不生效
注意二、
attachEvent和Script方式同时使用是不会被覆盖的,均会被调用

其他

一、关于IE不能调试的问题,直接下载一个插件即可
参考:https://www.cnblogs.com/cxying93/p/6586694.html

二、codebase 无需注册直接安装ocx
codebase
效果
安装
三、卸载

regsvr32 /u 文件路径
regsvr32

四、AfxBeginThread

五、查看函数
这样我们再调试中就可以看到OCX的公开函数了
公开函数
调试代码如下:

var ocx = new ActiveXObject("ACTIVEXDEMO.ActiveXDemoCtrl.1");
var test = ocx.ShowEdit("草泥马");

源代码

关注公众号
公众号
回复
互调OCX
获取

还有更多干货分享…

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值