前段时间公司做了个比较大的项目,需要用到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. Linux下修改IP、DNS、路由命令行设置

    本文最后修改时间:20180313 一.快速修改,重启后设置就没了 ifconfig eth0 192.168.1.22 netmask 255.255.255.0 up route add defa ...

  2. IP Core 分类

    IP(Intelligent Property)核是具有知识产权核的集成电路芯核总称,是经过反复验证过的.具有特定功能的宏模块,与芯片制造工艺无关,可以移植到不同的半导体工艺中.到了SOC阶段,IP核 ...

  3. fedora 28 , firewalld 防火墙控制,firewall-cmd 管理防火墙规则

    今天,在使用fedora时,需要修改防火墙规则,一时间忘记了命令是什么,这里进行记录一下. 目前 fedora 28/ centos 7 使用 firewalld 作为防火墙软件:下面我就怎么简单管理 ...

  4. 什么是Docker?

      概观 Docker是推动集装箱运动的公司,也是唯一一家能够解决混合云中的每个应用的集装箱平台提供商.当今的企业面临数字化转型的压力,但受到现有应用程序和基础架构的制约,同时合理化日益多样化的云,数 ...

  5. python基础 - 元组操作

    元组 tuple 元组是不可变对象. 元组初始化 t = tuple() t = () t = tuple(range(1,7,2)) t = (1,2,3,4,5,1) t = (1,) t = ( ...

  6. C语句详细(初学者)

    C程序的执行部分是由语句组成的.程序的功能也是由执行语句实现的. C语句分为以下六类: 1.表达式语句:表达式加上分号“:”组成.执行表达式语句就是计算表达式的值. 2.函数调用语句:函数名.实际参数 ...

  7. 新鲜出炉的jquery fileupload 插件

    内容属原创,转载请注明出处 为什么做这个东东 项目中需要用到一个多附件上传的控件,找了一圈没找到中意的(唯一一个中意点的还不开源,费用比较高),这不,只得自己抡刀上了. 需求是什么 这么个上传的东东, ...

  8. 使用pymysql(使用一)

    创建数据表 import pymysql db = pymysql.connect("localhost","root",""," ...

  9. Android ActionBar全然解析,使用官方推荐的最佳导航栏(上)

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/18234477 本篇文章主要内容来自于Android Doc.我翻译之后又做了些加工 ...

  10. centos7下安装docker(13.3volume生命周期管理)

    本章讨论:volume的备份,恢复,迁移和销毁 1.备份 通过前面的大量的实验,我们知道volume 是依赖host存在的,是host中的文件或目录,所以volume 的备份实际是对文件系统的备份. ...