最近接手了一个针对Google Chrome的需求,最终是使用Native Messaging来实现的。通过这个连载,将把本次开发从方案选定到编码的全部过程进行完整的回顾,并记录开发过程中踩过的各种坑,给首次接触或希望使用chrome插件/扩展技术的朋友,提供一些经验参考。

需求概要是这样,项目本身是一个在线办公的web应用,其中有一个功能模块是刷卡考勤,原来的这个功能仅支持IE浏览器,具体是在某个页面上,通过IE的AtiveX控件,显示出连接在客户机上的IDR读卡器上识别到的卡片的卡号。新的需求要求这个功能要支持Chrome浏览器。

分析一下,目标是让Chrome浏览器通过某个途径,能够达到和在IE浏览器上同样的效果,而已知的条件是磁卡机厂商提供的AtiveX控件。由于这个项目中的磁卡机款式比较老,并不像现在市面上能买到的免驱的设备,电脑通过usb连接马上就识别为HID Device,因此借助驱动和磁卡读卡器通讯是避免不了的。另一个技术关键点是,Chrome本身提供的硬件访问相关API也无法直接和读卡器通讯,那么剩下可选的方案逃不出NaCl和Native Messaging。

接下来先看看NaCl,它确实是一项深受开发者喜爱的技术,在Google大力推动下,ppapi取代npapi成为Chrome唯一的核心插件方式,以往开发过的c/c++的组件和应用尽皆得以保留和web页面交互,它的发布形式也相当丰富,nacl/pnacl甚至都可以通过web服务器获取,和自己的web站点一起部署。遗憾的是,我手上可用的磁卡机的访问组件,是随ActiveX控件一起打包的win32下开发的x86类库,更要命的是没有.h头文件和.lib库,只有一个dll动态库,也就是说,我是需要win32 api的,使用LoadLibrary和GetProcAddress才能调用到dll库中需要的函数,结合NaCl SDK,最合适的方案应该是pepper plugin。但我最后否定了这个方案,原因是Chrome上注册pepper plugin是通过命令行的,而且不是永久生效的,也许是我并没有找到正确的方法,在时间j有限的前提下,我没有深入下去。

NaCl

Pepper Plugin

所以,最后只有祭出Native Messaging这个大杀器了,它的原理很好理解,Chrome的沙箱开辟了一个跨进程通讯的通道,允许Chrome Extension扩展能发送消息给本地任何一个支持stdio的进程,并从这个进程获得响应消息。这个方案对Chrome来说,需要开发一个扩展,对本地来说,需要一个控制台程序或windows service,在时间和难度的考虑下,这就可以接受了。

Native Messaging

后续我将分成几篇分别展示各个部分开发的内容,在本篇结尾,我分享几个资源 ,是我在尝试NaCl方案时,收集到的还不错的资料,因为我也是头一回接触这个,所以类似开发指南和介绍的内容是相当难得的。

1.Google I/O 2012 - Native Client LIVE

2.CEF和PPAPI

3.Google I/O 2012 - Life of a Native Client Instr

Google Chrome Native Messaging开发实录(一)背景介绍的更多相关文章

  1. Google Chrome Native Messaging开发实录(二)Chrome Extension扩展

    接上一篇<Google Chrome Native Messaging开发实录(一)背景介绍>的项目背景,话不多说,有关Chrome Extension介绍和文档就不展开了,直接上代码. ...

  2. Chrome Native Messaging 与本地程序之间的通信

    最近项目上出现了web打印不稳定的问题,师父决定web调用本地打印程序,在查阅了相关资料和加了几个相关群咨询后得知新版的chrome不支持NNAPI了,最好用Native Messaging来处理,经 ...

  3. Google Chrome 扩展程序开发

    根据公司的规定,每月八小时,弹性工作制.所以大家平时来的不太准时,如果有事,下班也就早些回去了.所以一个月下来工作时间可能不够,但是公司的考勤日历是这样的: 除了请假和法定节假日外,其他样式显示都是一 ...

  4. Google Chrome浏览器插件入门开发

    --1. 在html文件中引用js 文件 --2.在Google Chrome中开发简单插件 1.首先,简单说明一下在html 中引用js 文件: 将kittenbook.html 和 kittenb ...

  5. Chrome浏览器扩展开发系列之十四:本地消息机制Native messaging

    通过将浏览器所在客户端的本地应用注册为Chrome浏览器扩展的“本地消息主机(native messaging host)”,Chrome浏览器扩展还可以与客户端本地应用之间收发消息. 客户端的本地应 ...

  6. Chrome 小工具: 启动本地应用 (Native messaging)

    最近遇到一个新的问题.需要使用Chrome 插件, 从我们对我们当地的一个网站之一启动C#应用,同时通过本申请值执行不同的操作. 在这里记录下解决的过程.以便以后查找 首先我们须要新建一个google ...

  7. Chrome浏览器扩展开发系列之十四:本地消息机制Native messagin

    Chrome浏览器扩展开发系列之十四:本地消息机制Native messaging 2016-11-24 09:36 114人阅读 评论(0) 收藏 举报  分类: PPAPI(27)  通过将浏览器 ...

  8. Chrome 插件: 起动本地应用 (Native messaging)

    Chrome 插件: 起动本地应用 (Native messaging) www.MyException.Cn  网友分享于:2014-08-01  浏览:3次   Chrome 插件: 启动本地应用 ...

  9. 作为Web开发人员,我为什么喜欢Google Chrome浏览器

    来源: http://www.cnblogs.com/QLeelulu/archive/2011/08/28/2156402.html 在Google Chrome浏览器出来之前,我一直使用FireF ...

随机推荐

  1. Windows下Python安装: requires numpy+mkl 和ImportError: cannot import name NUMPY_MKL

    最近写了一篇关于“微软开源分布式高性能GB框架LightGBM安装使用”的文章,有小伙伴安装Python环境遇到了问题.我个人也尝试安装了一下,确实遇到了很多问题."Windows7下pyt ...

  2. linux内核链表使用

    原文链接:http://blog.csdn.net/xnwyd/article/details/7359373 Linux内核链表的核心思想是:在用户自定义的结构A中声明list_head类型的成员p ...

  3. docker 搭建 MYSQL并且完成主从复制

    mysql主从复制逻辑: 1.从库执行start slave 开启主从复制. 2.从库请求连接到主库,并且指定binlog文件以及位置后发出请求. 3.主库收到从库请求后,将信息返回给从库,除了信息日 ...

  4. Chapter15 Principles of Metabolic Regulation

    15.1 调节代谢的通路 (1)细胞和有机体维持着动态稳定 调节作用的基因多 2500个 12% 激酶占比多 300个 一个通路受到多方调节 (2)酶的数量和催化活性 可以被调节 反应物的调控 糖酵解 ...

  5. (转)什么是.NET?什么是CLI?什么是CLR?IL是什么?JIT是什么,它是如何工作的?GC是什么,简述一下GC的工作方式?

    转自:http://www.cnblogs.com/haofaner/articles/2288968.html 1:什么是.NET? NET 是 Microsoft 的用以创建 XML Web 服务 ...

  6. Leetcode--136. Single Number(easy)

    Given a non-empty array of integers, every element appears twice except for one. Find that single on ...

  7. DXP快捷键记录(红色为经常用到的)

    dxp快捷键 1.设计浏览器快捷键:鼠标左击                         选择鼠标位置的文档鼠标双击                         编辑鼠标位置的文档鼠标右击   ...

  8. Spring 使用javaconfig配置

    除了使用xml,spring提供javaconfig配置,下面是简单的例子: 1.声明接口 /** * */ package com.junge.demo.spring.service; /** * ...

  9. Kali Linux渗透测试实战 2.1 DNS信息收集

    目录 2.1 DNS信息收集1 2.1.1 whois查询3 2.1.2 域名基本信息查询4 Dns服务器查询4 a记录查询4 mx记录查询5 2.1.3 域名枚举5 fierse 5 dnsdict ...

  10. NLog配置JsonLayout中文输出为unicode问题

    日志输出现要改为json格式,网上查询layout配置为JsonLayout就可以了,结果发现输出中文为unicode编码,看很多文章说配置encode="false"就可以了,结 ...