背景
某平台登录需要通过第三方认证,比如ukey证书,需要用到相关驱动生成证书,以及判断ukey的插拔状态等。
实现思路
- 使用IE浏览器内置的ActiveXObject,先把驱动服务启动起来
isIE () {
return !!window.ActiveXObject || 'ActiveXObject' in window;
}
...
// 首先判断驱动是否存在
let dkey = null;
try {
dkey = new ActiveXObject('驱动的名称');
} catch (e) {
...
}
// 使用这个实例化的对象进行通讯,ImportCertToAdmin是该驱动的方法
try {
rs = dkey.ImportCertToAdmin('要传的参数');
} catch (e) {
...
}
- 与驱动服务的通讯:封装一个jsonp请求(解决跨域问题),向已安装好的驱动所启动的服务(本地)发送请求。这是因为该驱动安装好后会在本地建立一个服务,然后浏览器与这个服务进行通讯。
function jsonp(url, options) {
url = 'https://127.0.0.1:' + options.port + '/api';
...
}
function ukeyMonitor (api, [], options) {
options = {
data: {
fun: '驱动的api' // 具体api传入方法看后台设计
}
}
jsonp(url, options);
}
// 与本地服务通讯,api是驱动提供的方法名
ukeyMonitor (api, [], {
...
success: (res) => {
...
},
error: (err) => {
...
}
});