前段时间公司做了个比较大的项目,需要用到ocx控件,我厂大部分项目都采用C#.net,而winform程序条用ocx控件接口是相对简单的,但是javascript调用ocx接口,却和winform的用法有些不同,其实真捉摸下,也就能发现:差别不大。

笔者此次主要阐述在项目中用javascript调用ocx控件接口,也就是activeX控件时所遇到的问题及其解决方案。winform用法不在此篇中阐述。

调用activeX插件前,我们要做一些准备工作,我们介绍两种方案:

1.使用regsvr32 命令注册ocx控件,然后用处理web页面文件,我们以html文件为例:在DOM结构中添加如下代码:

<object id="ActiveXClient" classid="CLSID:E85D67B7-B439-46C0-8F7B-18C06774B4B0" style="LEFT: 0px; WIDTH: 100%; TOP: 0px; HEIGHT: 1px"><param name="_ExtentX" value="22860"><param name="_ExtentY" value="1217"></object>

之后便可以使用该对象调用activeX控件的接口,调用方法为:ActiveXClient.function();

可以直接用ID获取该接口对象。

这中方法有个不便:每次打开IE浏览器都会提示:

点击Allow blocked content才能有权限使用控件接口。当然我们可以降低IE的拦截程度,但这不安全。最重要的是:我们不能强求用户每次都去点击这个按钮去使用我们的插件,更不能要求用户去降低他们浏览器的安全性。于是我们有方案二。

2.将ocx控件打包为Cab包,打包方法大家自行搜索,这里不作赘述。最后我们得到一个后缀名为cab的文件。

同样加入一个DOM对象到页面的DOM结构中,但这次有所不同:我们需要加入一个属性:codebase,该属性的值为cab包的路径。例如:

<object id="CtiClient" classid="CLSID:E85D67B7-B439-46C0-8F7B-18C06774B4B0" codebase=http://localhost/DownLoad/MyCab.CAB#version=1,5,7,2 style="LEFT: 0px; WIDTH: 100%; TOP: 0px; HEIGHT: 0px"><param name="_ExtentX" value="22860"><param name="_ExtentY" value="1217"></object>

在打开该页面,IE会直接弹出提示框:是否要安装该插件,选择是。安装完成后,系统会自动帮我们注册ocx控件,并让浏览器自行调用,不再有浏览器权限的烦恼,一劳永逸。

当cab包版本更新时,只要更新文件,并更改代码中cab包的版本号,浏览器便会自动安装最新的cab包,易于维护。

下面笔者描述下在开发过程中遇到的问题:页面提示安装cab包成功,但我开始调接口时,总说我的接口无效或不存在。但IDE能够帮助我取到接口,且接口名和参数都与文档一致,这着实让笔者困扰了很久。

最后发现,加到DOM结构中的DOM对象,其display属性设置为none,即隐藏。大家都知道,虽然隐藏,但该DOM对象是仍然存在的,可activeX插件就是这样规定的,不能将它隐藏,于是我们将display:none移除,接口终于能正常调用了。为了不让它影响该页面的样式,我们可以将它放置在页面顶部或底部,并将它的高度等属性设置为0,这样便可正常调用,且不影响页面布局。

转载于:https://www.cnblogs.com/smartLeon/p/4063791.html

javascript调用ActiveX接口失败的解决方案及使用心得相关推荐

  1. discuz云平台报调用远程接口失败的问题分析和解决

    根据网络两篇文章整理 问题描述: 当开通或关闭某个云平台服务的时候,报如下错误信息: 调用远程接口失败.请检查您的服务器是否处于内网以及您服务器的防火墙设置. 云平台测试站点的接口文件正常,于是开始在 ...

  2. javascript调用activex控件

    代码 <HTML> <BODY> <object classid="clsid:CA8A9780-280D-11CF-A24D-444553540000&quo ...

  3. 华为快游戏调用登录接口失败,返回错误码 -1

    问题描述 在快游戏项目中,调用华为提供的登录接口,按照示例代码编写完成后,在手机上调试登录时,返回错误码 -1.如下: I jsLog : gameLoginWithReal fail:"A ...

  4. pyqt 服务器mysql_PyQt5 中调用MySql接口失败 ( QSqlDatabase 组件) 在Linux环境下如何修改...

    最近在跑下面这么一个代码,怎么跑都无法连通服务器,如下: #-*- coding: utf-8 -*- '''[简介] PyQt5中 处理database 例子''' importsysfrom Py ...

  5. java调用远程 接口_java通过url调用远程接口返回json数据

    java通过url调用远程接口返回json数据,有用户名和密码验证, 转自 https://blog.csdn.net/wanglong1990421/article/details/78815856 ...

  6. ios请求php接口失败,laravel,php_iOS调用Laravel接口返回错误信息,laravel,php,ios - phpStudy...

    iOS调用Laravel接口返回错误信息 iOS端代码如下: AFHTTPRequestOperationManager *manage = [[AFHTTPRequestOperationManag ...

  7. Stanford CoreNLP 3.6.0 中文指代消解模块调用失败的解决方案

    Stanford CoreNLP 3.6.0 中文指代消解模块调用失败的解决方案 参考文章: (1)Stanford CoreNLP 3.6.0 中文指代消解模块调用失败的解决方案 (2)https: ...

  8. 安装蓝鲸智云社区版5.0.4监控页面调用接口失败

    环境描述:全新安装蓝鲸智云社区版5.0.4,不存在升级 安装配置:     192.168.0.162 kafka,zk,es,appt,fta,consul,bkdata     192.168.0 ...

  9. android调用js接口,Android代码和JavaScript互相调用

    WebView加载一个使用JavaScript的网页,并且要实现相互之间的调用,需要启用WebView对JavaScript的支持,一旦启用之后你就可以通过接口来实现本地代码和JavaScript代码 ...

最新文章

  1. 在闲鱼传疯了,某大厂P8面试题库泄漏!
  2. 用一个创业故事串起操作系统原理(四)
  3. C#利用Graphics类绘制进阶--实现图片等比例缩放
  4. 拒绝卡顿,揭秘盒马鲜生 Android 短视频秒播优化方案
  5. TP框架对数据库的基本操作
  6. 最大值_285期 博最大值2路,已经箭在弦上!
  7. 从零开始搭建口袋妖怪管理系统(3)-实现一个简单的SPA管理系统
  8. 图解算法之排序算法(6)——快速排序
  9. java生成excel到本地_java 将数据库中的数据导出成Excel文件 并保存到本地 将文件地址返回给前端...
  10. 强悍的 Linux —— 系统文件及其作用
  11. python isodd()判断奇偶_EXCEL VBA:Iseven Isodd 判断奇偶
  12. 洛谷——P1163 银行贷款
  13. 使用组策略配置QoS
  14. 修正的判定条件覆盖例题_语句覆盖、判断覆盖、条件覆盖、条件判定组合覆盖、多条件覆盖、修正条件覆盖...
  15. 计算机突然断电或死机 重启后,电脑重启死机故障排除
  16. 【AIOT】HumanCenteredSensing
  17. 老婆反问我:“是不是也算个凤凰男啊?”
  18. 1000多块整个插板,arduino + android 蓝牙插板的实现--屌丝版
  19. k8s入坑之报错(9)k8s node节点加入到集群时卡住 “[preflight] Running pre-flight checks”...
  20. 基于多目标灰狼算法的冷热电综合三联供微网低碳经济 MATLAB 仿真

热门文章

  1. String通过“+”号拼接字符串的底层实现
  2. python数据可视化-matplotlib之散点图sactter函数详解
  3. linux fb设备驱动,linux设备驱动归纳总结(八):1.总线、设备和驱动
  4. Openresty各个阶段的执行次序
  5. Unity游戏开发——Excel数据读取到游戏中
  6. 怎么做游戏打击感浅述
  7. 浅谈Android五大布局
  8. Starling移动平台开发初体验
  9. 安徽省2012年下半年计算机水平考试(二级 c语言程序设计),安徽省计算机等级级考试真题C语言2012年12月.doc...
  10. 如何手动释放linux内存的方法,centos手动释放内存的方法