前段时间公司做了个比较大的项目,需要用到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,这样便可正常调用,且不影响页面布局。

javascript调用ActiveX接口失败的解决方案及使用心得的更多相关文章

  1. Javascript调用ActiveX示例

      Javascript调用ActiveX示例   写一个ActiveX控件比如叫做MyNameSpace.SecreteInfo,安装在客户机器上,这样可以通过c++获取到机器的几乎任何信息. 在网 ...

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

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

  3. PyQt5 中调用MySql接口失败 ( QSqlDatabase 组件) 在Linux环境下如何修改

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

  4. [88221008]调用新下单接口失败,result:162020004,resInfo

    [88221008]调用新下单接口失败,result:162020004,resInfo

  5. Jmeter--thrift接口压测,调用jar包失败报错:java.lang.NoSuchMethodError:

    调用thrift接口压测的jar包,出现了错误:java.lang.NoSuchMethodError: 错误可能的原因: 有这个类,该类真的没有这个方法 有这个类,而且有好几个,他们之间发生了冲突 ...

  6. WebApi接口 - 如何在应用中调用webapi接口

    很高兴能再次和大家分享webapi接口的相关文章,本篇将要讲解的是如何在应用中调用webapi接口:对于大部分做内部管理系统及类似系统的朋友来说很少会去调用别人的接口,因此可能在这方面存在一些困惑,希 ...

  7. 【总结】浅谈JavaScript中的接口

    一.什么是接口 接口是面向对象JavaScript程序员的工具箱中最有用的工具之一.在设计模式中提出的可重用的面向对象设计的原则之一就是“针对接口编程而不是实现编程”,即我们所说的面向接口编程,这个概 ...

  8. 调用支付宝接口Android客户端没有支付宝APP的情况下解决无法调用支付宝页面的问题

    这几天一直研究支付宝接口调用,因为当前应用中需要调用支付宝接口作移动支付. 遇到一个问题困扰几天,就是当我们的手机端未安装支付宝APP的时候,需要在自己应用中调用支付宝的登陆网页进行支付.我是Andr ...

  9. 通过JavaScript调用SOAP终结点执行实体消息

    关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复148或者20150813可方便获取本文,同时可以在第一时间得到我发布的最新的博文信息,follow me! 利用OData终结点可以方便的对 ...

随机推荐

  1. mybatis学习系列二

    1 参数处理(封装map过程)(23) 1.1)F5进入断点:Employee employee1=mapper.selectEmployeeByMap(map); 1.2)进入MapperProxy ...

  2. URL编码:怎样读取特殊字符

    URL编码:怎样读取特殊字符 (这个我曾经谢过教程,这里整理过来)从外部文本载入到动态文本的时候,一些特殊字符(如&/%等)无法正常现实,有的符号还会导致这个符号后面的字符无法现实(如& ...

  3. Android ListView在增加HeaderView之后使用getLocationInWindow和getLocationOnScreen获得值不正确的解决方法

    近日遇到一个很恶心的问题,把解决方法放到空间里来分享给大家: 问题发生的条件: 1)ListView 控件中使用addHeaderView,为其添加了一个header view.(基本常识:heade ...

  4. Django应用:学习日志网站

    目录 一.创建虚拟环境(Windows) 二.创建项目 三.创建应用程序 四.创建网页:学习笔记主页 五.创建其他网页 六.用户输入数据 七.用户账户 八.让用户拥有自己的数据 九.设置应用程序样式 ...

  5. mybatis使用<choose> <when>

    一.需求 后台使用orcale数据库,mybatis做持久层,前台搜索功能,根据类型搜索,但是数据库中没有类型字段, 所以需要在where条件语句中进行判断,当type == x1 时和type == ...

  6. Beta冲刺! Day1 - 磨刀

    Beta冲刺! Day1 - 磨刀 今日已完成 晨瑶:罗列Beta计划.和新人交接.任务安排 昭锡:无 永盛:服务器出现一些 mysql 的问题,伟鹏的爬取脚本没办法远程链接到服务器,在修 立强:学习 ...

  7. 寒假集训——搜索 D - Cubes for Masha

    #include <stdio.h> #include <stdlib.h> #include <iostream> #include <string.h&g ...

  8. 单节点etcd配置

    $ cat /etc/etcd/etcd.conf ETCD_DATA_DIR="/var/lib/etcd/default.etcd" #监听URL,用于与其他节点通讯 ETCD ...

  9. go标准库的学习-io/ioutil

    参考https://studygolang.com/pkgdoc 导入方式: import "io/ioutil" 包ioutil实现了一些I/O实用程序函数. 1.var 变量 ...

  10. 使用 ps、strace、lsof 进行 Linux 进程 trouble-shooting

      linux_observability_tools 介绍 在Linux 下进行进程的排错,有很多方法.比如,修改源代码,print出一些关键的信息,如果代码是Python 的话,可以使用trace ...