你的位置:首页 > 操作系统

[操作系统]Chrome 扩展机制


    据说,今年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/

http://open.chrome.360.cn/extension_dev/overview.html
官网文档
https://developer.chrome.com/extensions/devguide
可以自动生成扩展的一个网站
http://extensionizr.com/