js如何实现与驱动的通讯

243 阅读1分钟

背景

某平台登录需要通过第三方认证,比如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) => {
           ...
       }
   });