zoukankan      html  css  js  c++  java
  • Chrome浏览器扩展开发系列之十四:本地消息机制Native messagin

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

     分类:

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

    客户端的本地应用注册为Chrome浏览器扩展的“本地消息主机”之后,Chrome浏览器会在独立的进程中启动该本地应用,并通过标准输入/输出流(stdin/stdout)进行消息通信。

    1)      本地应用的配置文件的内容

    本地应用要能够成为“本地消息主机”,必须有一个manifest.json配置文件(文件名任意),该文件是一个有效的JSON文件,示例如下。

    复制代码
    1 {
    2   "name": "com.my_company.my_application",
    3   "description": "My Application",
    4   "path": "C:\Program Files\My Application\chrome_native_messaging_host.exe",
    5   "type": "stdio",
    6   "allowed_origins": [
    7     "chrome-extension://knldjmfmopnpolahpmmgbagdohdnhkik/"
    8   ]
    9 }
    复制代码

    其中的属性含义及用法如下。

    属性名

    含义

    name

    标识名称。

    只能由小写字母、数字、_和.组成;首尾不能是.且不能有. 连续出现

    description

    描述

    path

    本地应用的完整路径,Linux和OS X上必须是绝对路径,Windows上可以是基于配置文件所在位置的相对路径

    type

    与本地消息主机进行通信的接口类型。

    目前只支持stdio,表示Chrome浏览器通过stdin和stdout与本地消息主机通信

    allowed_origins

    授权与本地消息主机进行通信的Chrome浏览器扩展。

    不能使用通配符

    2)      本地应用的配置文件的路径

    配置文件的具体位置与操作系统有关。在Windows操作系统上,配置文件可以位于任何路径,只需在安装本地应用时修改注册表指明其位置即可。

    创建key:

    HKEY_LOCAL_MACHINESOFTWAREGoogleChromeNativeMessagingHostscom.my_company.my_application

    HKEY_CURRENT_USERSOFTWAREGoogleChromeNativeMessagingHostscom.my_company.my_application

    设置默认值Default为配置文件所在的绝对路径:

    C:path	o
    mh-manifest.json

    也可以直接创建注册表文件.reg如下,安装时执行即可:

    1 Windows Registry Editor Version 5.00
    2 [HKEY_CURRENT_USERSoftwareGoogleChromeNativeMessagingHostscom.my_company.my_application]
    3 @="C:\path\to\nmh-manifest.json"

    对于Linux和OS X操作系统,本地应用的配置文件的位置首先与安装的Chrome浏览器(Google Chrome或Chromium)有关。其次,如果是系统级别的本地应用,其配置文件应该位于固定位置。如果是用户级别的本地应用,则其配置文件位于用户主目录下的名为NativeMessagingHosts的子目录中。具体位置如下表所示。

     

    Google Chrome

    Chromium

    Linux系统应用

    /etc/opt/chrome/native-messaging-hosts/com.my_company.my_application.json

    /etc/chromium/native-messaging-hosts/com.my_company.my_application.json

    Linux用户应用

    ~/.config/google-chrome/NativeMessagingHosts/com.my_company.my_application.json

    ~/.config/chromium/NativeMessagingHosts/com.my_company.my_application.json

    OS X系统应用

    /Library/Google/Chrome/NativeMessagingHosts/com.my_company.my_application.json

    /Library/Application Support/Chromium/NativeMessagingHosts/com.my_company.my_application.json

    OS X用户应用

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

    ~/Library/Application Support/Chromium/NativeMessagingHosts/com.my_company.my_application.json

    3)      Chrome浏览器扩展与本地应用之间的消息通信

    Chrome浏览器扩展要与客户端本地应用进行通信,首先必须在Chrome浏览器扩展的manifest.json配置文件中声明权限如下:

    1 {
    2   "permissions": [
    3     "nativeMessaging"
    4   ],
    5 }

    Chrome浏览器扩展与客户端本地应用之间的消息通信非常类似于不同Chrome浏览器扩展之间的通信,示例如下。

    在Chrome浏览器扩展中创建端口,监听来自本地应用的多个消息:

    复制代码
     1 var port = chrome.runtime.connectNative('com.my_company.my_application');
     2  //参数为本地应用在其配置文件中声明的标识名称
     3 
     4 port.onMessage.addListener(function(msg) {//收到消息后的处理函数
     5   console.log("Received" + msg);
     6 });
     7 port.onDisconnect.addListener(function() {
     8   console.log("Disconnected");
     9 });
    10 
    11 port.postMessage({ text: "Hello, my_application" }); //发送一条消息
    复制代码

    在Chrome浏览器扩展中也可以不打开端口,发送一次性消息如下:

    1 chrome.runtime.sendNativeMessage(
    2   'com.my_company.my_application',
    3   { text: "Hello" },
    4   function(response) {//收到返回消息后的处理函数
    5     console.log("Received " + response);
    6   });

    如果Chrome浏览器扩展在调用本地应用时发生异常,将会在stderr输出错误信息。如果因违反了本地消息的协议约束而出错,将会在Chrome浏览器的错误日志文件输出错误信息。Linux和OS X操作系统上,通过命令行启动Chrome浏览器,就可以在命令行窗口看到错误信息。Windows操作系统上,启动Chrome浏览器时带上--enable-logging参数(在chrome.exe的右键属性菜单中,General面板顶部的文本框中,chrome.exe后面直接跟上参数即可),就可以在Chrome浏览器的日志文件中看到错误信息。

    4)      本地消息的协议约束

    客户端的本地应用注册为Chrome浏览器扩展的“本地消息主机”之后,Chrome浏览器会在独立的进程中启动该本地应用,并通过标准输入/输出流(stdin/stdout)进行消息通信。

    Chrome浏览器扩展与客户端的本地应用之间的双向通信采用消息机制,该消息以JSON格式,UTF-8编码,带32位(操作系统本地字节序)的消息长度作为前缀。从本地应用发送到Chrome浏览器扩展的消息,最大尺寸是1M字节。从Chrome浏览器扩展发送到本地应用的消息,最大尺寸是4G字节。

     
    0
    0
  • 相关阅读:
    uva 11294 Wedding
    uvalive 4452 The Ministers’ Major Mess
    uvalive 3211 Now Or Later
    uvalive 3713 Astronauts
    uvalive 4288 Cat Vs. Dog
    uvalive 3276 The Great Wall Game
    uva 1411 Ants
    uva 11383 Golden Tiger Claw
    uva 11419 SAM I AM
    uvalive 3415 Guardian Of Decency
  • 原文地址:https://www.cnblogs.com/developer-ios/p/6357414.html
Copyright © 2011-2022 走看看