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

时间:2015-10-08 16:17:59      阅读:1560      评论:0      收藏:0      [点我收藏+]

标签:des   class   style   log   com   使用   si   it   la

通过将浏览器所在客户端的本地应用注册为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_MACHINE\SOFTWARE\Google\Chrome\NativeMessagingHosts\com.my_company.my_application

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

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

C:\path\to\nmh-manifest.json

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

1 Windows Registry Editor Version 5.00
2 [HKEY_CURRENT_USER\Software\Google\Chrome\NativeMessagingHosts\com.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字节。

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

标签:des   class   style   log   com   使用   si   it   la

原文:http://www.cnblogs.com/champagne/p/4861209.html

Chrome 消息机制的更多相关文章

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

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

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

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

  3. iOS开发系列--通知与消息机制

    概述 在多数移动应用中任何时候都只能有一个应用程序处于活跃状态,如果其他应用此刻发生了一些用户感兴趣的那么通过通知机制就可以告诉用户此时发生的事情.iOS中通知机制又叫消息机制,其包括两类:一类是本地 ...

  4. Android消息传递之Handler消息机制

    前言: 无论是现在所做的项目还是以前的项目中,都会遇见线程之间通信.组件之间通信,目前统一采用EventBus来做处理,在总结学习EventBus之前,觉得还是需要学习总结一下最初的实现方式,也算是不 ...

  5. Windows消息机制

    Windows的消息系统是由3个部分组成的: · 消息队列.Windows能够为所有的应用程序维护一个消息队列.应用程序必须从消息队列中获取消息,然后分派给某个窗口.· 消息循环.通过这个循环机制应用 ...

  6. OSG消息机制之事件处理概述

    OSG的消息机制包括好多个头文件预定义及多个类. 首先,消息接收相关的类当属osgGA::GUIEventHandler和osgGA::GUIEventAdapter这两个类了.前者处理OSG程序与用 ...

  7. [转]runtime 消息机制

    原文地址:http://www.jianshu.com/p/f6300eb3ec3d 一.关于runtime 之前在项目中有遇到过用runtime解决改变全局字体的问题,所以再一次感受到了runtim ...

  8. IOS 消息机制(NSNotificationCenter)

    消息机制 NSNotificationCenter 一直都在频繁使用,但是却对其原理不是十分了解.今天就花些时间,把消息机制原理重头到尾好好过一遍. iOS 提供了一种 "同步的" ...

  9. Android之消息机制Handler,Looper,Message解析

    PS:由于感冒原因,本篇写的有点没有主干,大家凑合看吧.. 学习内容: 1.MessageQueue,Looper,MessageQueue的作用. 2.子线程向主线程中发送消息 3.主线程向子线程中 ...

随机推荐

  1. 《CSS世界》学习笔记(一)

    <CSS世界>,张鑫旭著,人民邮电出版社,2017年12月第一版. 1.P9二维码链接文章的demo值得一看,可以实现有关“某些区域颜色始终保持一致”的效果. P9二维码所链接文章的一个d ...

  2. TI 77GHZ雷达开发套件 RDP-DC100

                                        RDP-DC100用户使用手册           目录 1.      硬件说明... 3 1.1.      官方处理板的修 ...

  3. Knockout 实例

    定义见:http://baike.baidu.com/item/Knockout/18611883#viewPageContent 此处仅列举一个小例子 <p> <select da ...

  4. 【Linux】 JDK安装及配置 (linux-tar.gz版)

    安装环境:Linux(CentOS 7 64位 版) JDK安装:tar.gz为解压后就可以使用的版本,这里使用jdk-8u211-linux-x64.tar.gz版,安装到/usr/java/(us ...

  5. 梦想3D控件 2018.7.26更新

    下载地址: http://www.mxdraw.com/ndetail_108.html 1.  编写所有接口函数使用的CHM文档 2.  增加交互绘制功能 3.  增加案例弧形窗建模案例 4.  增 ...

  6. Xcode编译ffmpeg(2)

    iOS: FFmpeg编译和使用问题总结 折磨了我近一周多时间的FFmpeg库编译问题终于解决了,必须得把这一段时间来遇到过的坑全写出来.如果急着解决问题,编译最新版本的FFmpeg库请直接看第二部分 ...

  7. HDU - 2044 - 一只小蜜蜂...(dp)

    题意: 如题 思路: 仔细观察图 1-4和3-6其实是一样的答案,那么所有的方案都可以相减,意思为全部转化为从1开始 剩下的就是观察规律,仔细观察5号,能到5号蜂房的只有3和4,3和4到5号蜂房只有一 ...

  8. UVA - 10723 Cyborg Genes (LCS)

    题目: 思路: 求两个串的最长公共子序列,则这个最短的串就是给出的两个串的长度和减去最长公共子序列的长度. 状态转移方程: 如果s[i-1]==t[j-1]就有dp[i][j] = dp[i-1][j ...

  9. shell输出颜色、printf输出颜色

    1.echo开启彩色输出: -e 开启echo中的转义: \e或者\033来输出Esc颜色: 恢复默认颜色为:\e[0m; 命令格式: echo -e "\e[字背景颜色:文字颜色m字符串\ ...

  10. 【Codeforces 923A】Primal Sport

    [链接] 我是链接,点我呀:) [题意] 题意 [题解] 考虑怎么得到数字x2=N,假设是质数p的倍数 那么x1肯定在x2-p+1~x2这个范围内才行 因为p的倍数要刚好大于等于x1, 所以x1肯定是 ...