据说,今年9月份开始,谷歌将在Chrome浏览器中全面禁用NPAPI插件,Chrome 45以后将无法再加载NPAPI插件,并推出了一种新的机制:扩展。

其实,如果把浏览器看作一块画布的话,NPAPI插件就像挂在画布上的各种小饰品,而扩展更像拼接在画布外小拼图。无论是插件还是扩展,都是为了让这副画更符合用户的期望。下面就只准备简单介绍一下扩展和Native Message机制。

扩展安装包

一个完整的扩展包,最终会一个.crx的压缩文件包存在,使用zip的解压文件可以直接打开的。

扩展安装,共有两种方式:

1)在Google APP Store中,找到相关的扩展,直接点击添加

2)在Chrome浏览器的地址栏中,输入chrome://extensions,打开扩展管理页面;

再将crx文件,直接拖进去就好了。

如果扩展无法与浏览器搭上线,那么扩展就真的一个块恰好放在浏览器边上的一块小拼图了。

扩展与浏览器间的通信,可以有两种形式:

1)短连接

发送消息:chrome.runtime.sendMessage

接收事件:chrome.runtime.onMessage.addListener

2)长连接

发送消息:var port = chrome.runtime.connect

port.postMessage

接收事件:port.onMessage.addListener

在某些时候,只通过扩展无法达到我们预期的效果,这个时候就需要引入Host端。从浏览器看下来,就是:浏览器<----->扩展<------>Host端。就是说:浏览器与扩展可以相互通信,扩展与Host端可以相互通信,但是Host端与浏览器无法直接通信。Chrome的示例给出的Demo,也是这样的一个结构。

扩展与Host端的通信,就需要遵从Native Message机制的。为了实现Native Message机制通信,需要提前做些准备:

1)Host端、扩展

2)Host端的JSON文件,在这个文件中定义了Host应用的名称,并为其绑定了扩展ID。只有在这里绑定过的,才是合法的,才是可以进行通信。

3)Host端的JSON文件,既然这么重要,那么浏览器要怎么样才能找到这个文件呢?

Windows平台下,是写在了注册表中;Mac下则是放在了指定目录下。

Windows平台:HKEY_LOCAL_MACHINE\SOFTWARE\Google\Chrome\NativeMessagingHosts\com.my_company.my_application或

                              HKEY_CURRENT_USER\SOFTWARE\Google\Chrome\NativeMessagingHosts\com.my_company.my_application

Mac平台:/Library/Google/Chrome/NativeMessagingHosts/com.my_company.my_application.json 或

          ~/Library/Application Support/Google/Chrome/NativeMessagingHosts/com.my_company.my_application.json

Native Message机制的通信方式,也有两种形式:

1)短连接

发送消息:chrome.runtime.sendNativeMessage

2)常连接

发送消息:var port = chrome.runtime.connectNative

port.postMessage

接收事件:port.onMessage.addListener

port.onDisconnect.addListener

关于Native Message机制,需要注意

1)扩展与Host端的通信,其实理解可以为基于标准输入输出接口的进程通信。在Host端中,必须以二进制流的方式进行读写。

2)从扩展到Host端的,单条消息最大不超过4GB

从Host端到扩展的,单条消息最大不超过1MB

3) 每条消息,都一个4字节的头,用来表示消息的长度。

Google的官方说明:

Chrome starts each native messaging host in a separate process and communicates with it using standard input (stdin) and standard output (stdout). The same format is used to send messages in both directions: each message is serialized using JSON, UTF-8 encoded and is preceded with 32-bit message length in native byte order. The maximum size of a single message from the native messaging host is 1 MB, mainly to protect Chrome from misbehaving native applications. The maximum size of the message sent to the native messaging host is 4 GB.

参考网址

NPAPI的介绍

https://zh.wikipedia.org/wiki/NPAPI

https://developer.chrome.com/extensions/npapi

某软件给出的扩展安装方式

http://honx.in/i/U7JbRYKo13vu6TsJ

中文文档(比官方更新要慢些)

http://chrome.cenchy.com/index.html

http://open.chrome.360.cn/

Chrome 扩展机制的更多相关文章

  1. Chrome扩展开发之二——Chrome扩展中脚本的运行机制和通信方式

    目录: 0.Chrome扩展开发(Gmail附件管理助手)系列之〇——概述 1.Chrome扩展开发之一——Chrome扩展的文件结构 2.Chrome扩展开发之二——Chrome扩展中脚本的运行机制 ...

  2. Chrome 消息传递机制

    Chrome插件开发入门(二)——消息传递机制 Blog | Qiushi Chen 2014-03-31 9538 阅读 Chrome 插件 由于插件的js运行环境有区别,所以消息传递机制是一个重要 ...

  3. Chrome扩展开发(Gmail附件管理助手)系列之〇——概述

    目录: 0.Chrome扩展开发(Gmail附件管理助手)系列之〇——概述 1.Chrome扩展开发之一——Chrome扩展的文件结构 2.Chrome扩展开发之二——Chrome扩展中脚本的运行机制 ...

  4. Chrome扩展开发之一——Chrome扩展的文件结构

    目录: 0.Chrome扩展开发(Gmail附件管理助手)系列之〇——概述 1.Chrome扩展开发之一——Chrome扩展的文件结构 2.Chrome扩展开发之二——Chrome扩展中脚本的运行机制 ...

  5. Chrome扩展开发之三——Chrome扩展中的数据本地存储和下载

    目录: 0.Chrome扩展开发(Gmail附件管理助手)系列之〇——概述 1.Chrome扩展开发之一——Chrome扩展的文件结构 2.Chrome扩展开发之二——Chrome扩展中脚本的运行机制 ...

  6. Chrome扩展开发之四——核心功能的实现思路

    目录: 0.Chrome扩展开发(Gmail附件管理助手)系列之〇——概述 1.Chrome扩展开发之一——Chrome扩展的文件结构 2.Chrome扩展开发之二——Chrome扩展中脚本的运行机制 ...

  7. Postman 是一个非常棒的Chrome扩展,提供功能强大的API & HTTP 请求调试

    Postman 是一个非常棒的Chrome扩展,提供功能强大的API & HTTP 请求调试   需要FQ才能安装,使用时应该不用FQ了,除非使用postman的历史记录功能:   非常棒的C ...

  8. Chrome浏览器扩展开发系列之八:Chrome扩展的数据存储

    Google Chrome浏览器扩展可以使用如下任何一种存储机制: HTML5的localStorage API实现的本地存储(此处略) Google的chrome.storage.* API实现的浏 ...

  9. 【前端工具】Chrome 扩展程序的开发与发布 -- 手把手教你开发扩展程序

    关于 chrome 扩展的文章,很久之前也写过一篇.清除页面广告?身为前端,自己做一款简易的chrome扩展吧. 本篇文章重在分享一些制作扩展的过程中比较重要的知识及难点. 什么是 chrome 扩展 ...

随机推荐

  1. 正则表达式和文本挖掘(Text Mining)

    在进行文本挖掘时,TSQL中的通配符(Wildchar)显得功能不足,这时,使用“CLR+正则表达式”是非常不错的选择,正则表达式看似非常复杂,但,万变不离其宗,熟练掌握正则表达式的元数据,就能熟练和 ...

  2. 【.net 深呼吸】使用二进制格式来压缩XML文档

    在相当多的情况下,咱们写入XML文件默认是使用文本格式来写入的,如果XML内容是通过网络传输,或者希望节省空间,特别是对于XML文档较大的情况,是得考虑尽可能地压缩XML文件的大小. XmlDicti ...

  3. 【Win 10 应用开发】透视效果

    所谓透视效果,就是在平面坐标空间上模拟出“好像”三维的效果.要是老周没有记错的话,以前在写WP8相关的内容时写过,UWP中的透视方法也保留了以前的Do法,其实这玩意儿是从 Silverlight 沿袭 ...

  4. 【.NET深呼吸】动态类型(扩充篇)

    前面两文中,老周已向大家介绍了关于动态类型对象的两种级别的使用方案,本篇呢,老周再讲一个自定义动态类型的例子. 前面给大家演示的例子中,动态类型中包装的是字典类型来存储数据的,这一次咱们换一种风味,老 ...

  5. Android数据加密之Aes加密

    前言: 项目中除了登陆,支付等接口采用rsa非对称加密,之外的采用aes对称加密,今天我们来认识一下aes加密. 其他几种加密方式: Android数据加密之Rsa加密 Android数据加密之Aes ...

  6. Android注解使用之使用Support Annotations注解优化代码

    前言: 前面学习总结了Java注解的使用,博客地址详见Java学习之注解Annotation实现原理,从本质上了解到什么注解,以及注解怎么使用?不要看见使用注解就想到反射会影响性能之类,今天我们就来学 ...

  7. 你真的会玩SQL吗?玩爆你的数据报表之存储过程编写(上)

    你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...

  8. [转]在 .NET 中远程请求 https 内容时,发生错误:根据验证过程,远程证书无效

    该文原网址:http://www.cnblogs.com/xwgli/p/5487930.html 在 .NET 中远程请求 https 内容时,发生错误:根据验证过程,远程证书无效.   当访问 h ...

  9. 【MVVM Light】Messager的使用

    一.前言       在MVVM编程的模式中,有时候我们会遇到一个很尴尬的情况: 若干个xaml.cs都复用一个ViewModel,当ViewModel想传递一个特定的消息给某一个xaml.cs的时候 ...

  10. 查看Sql Server被锁的表以及解锁

    查看被锁表: select spId from master..SysProcesses where db_Name(dbID) = '数据库名称' and spId <> @@SpId ...