最近接手了一个针对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

转载于:https://www.cnblogs.com/BeanHsiang/p/6580917.html

Google Chrome Native Messaging开发实录(一)背景介绍相关推荐

  1. chromium 37 chrome Native messaging 本地消息机制

    01 chrome Native messaging Native messaging 扩展解决chrome与本地程序通信的问题,可以解决从浏览器启动二进制文件的问题. 是通过扩展为browser进程 ...

  2. Google Chrome 扩展程序开发

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

  3. Google Chrome 工程师:JavaScript 不容错过的八大优化建议

    [摘要]本文为 Google Chrome 团队的开发项目工程师 Addy Osmani 在PerfMatters 2019 网页性能大会发表的"JavaScript性能优化"(h ...

  4. chrome浏览器内存_如何在Google Chrome浏览器中清除内存

    chrome浏览器内存 The latest development builds of Google Chrome include a way to make the browser clean u ...

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

    转自:http://www.myexception.cn/internet/1729118.html 最近碰到了一个新问题,需要利用Chrome 的插件, 从我们的一个网站中启动一个我们的本地C#应用 ...

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

    在Google Chrome浏览器出来之前,我一直使用FireFox,因为FireFox的插件非常丰富,更因为FireFox有强大的Firebug,对于前端开发可谓神器. 在Chrome出来的时候,我 ...

  7. Chrome浏览器扩展开发系列之一:初识Google Chrome扩展

    1.       Google Chrome扩展简介 Google Chrome扩展是一种软件,以增强Chrome浏览器的功能. Google Chrome扩展使用HTML.JavaScript.CS ...

  8. Google Chrome,是由Google开发的,一款设计非常简单、十分高效的Web浏览工具!

    目录 chrome浏览器一般指Google Chrome 2018年11月 Google Chrome是由Google开发的一款设计简单.高效的Web浏览工具. chrome浏览器一般指Google ...

  9. 32款网页设计和网页开发人员常用的Google chrome浏览器扩展程序

    对于网页设计人员或网站开发者来说,更喜欢使用像FF的此类浏览器,原因是其具有强大的辅助插件,可以帮助网页制作与开发提高效率,那么同样对于Google Cchrome浏览器来说也是具有大量的此类插件,本 ...

最新文章

  1. 在 Linux 上使用 lspci 命令查看硬件情况
  2. linux多进程条件变量,Linux 多线程条件变量同步
  3. c++对象模型-虚拟析构函数
  4. 台达变频器s1参数设置_【智】台达变频器计数输入功能接线和参数设置详解
  5. boost::gil::derived_view_type用法的测试程序
  6. PHP5.6.6上运行 ecshop 2.7.3常见问题处理
  7. hive日志位置(日志定位报错:Failed with exception Unable to move sourcehdfs://namenode/tmp/hive-pmp_bi/h)...
  8. 【JDBC】Eclipse连接Mysql
  9. opencv获取图片像素坐标_利用OpenCV从图片中提取矩形并标注坐标(室内平面地图)(一)
  10. 第43课 最大公约数 《小学生C++趣味编程》
  11. 一个导入到本地读取文档的方法
  12. 01背包和完全背包 的完整讲解版 包含 一维数组实现 和二维数组实现题目
  13. R语言系列:分布一致性和离散一致性检验
  14. Linux中sql*loader-350,SqlLoader
  15. Java面试基础问题之(一)—— JDK和JRE区别
  16. 压缩文件服务器返回出错,解压缩多部分文件 - 错误的zipfile偏移量(本地头信号):4...
  17. Modified Polygon (Allow modified: No), (Allow shelved: No)/修改的多边形(允许修改:否)(允许搁置:否)
  18. 拯救者R9000X显卡驱动安装
  19. 2剪切移位镜像反射旋转
  20. 微信授权文件放到域名根目录

热门文章

  1. django媒体文件上传设置
  2. python九九乘法表求和,平均数,最大值,最小值、金字塔、等边三角形
  3. Set集合以及HashSet、LinkedHashSet、TreeSet等讲解
  4. Scala入门到精通——第三十节 Scala脚本编程与结束语
  5. 蚂蚁金服大规模分布式事务实践和开源历程
  6. Spark创建DataFrame的三种方法
  7. 【全国动态】服务器列表
  8. 河南云计算和大数据“十三五”发展规划发布
  9. Weex动态化方案与双十一实践
  10. 详解MySQL中EXPLAIN解释命令