Chrome浏览器扩展开发系列之十四
Chrome浏览器扩展开发系列之十四:本地消息机制Native messaging
标签: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浏览器扩展开发系列之十四的更多相关文章
- Chrome浏览器扩展开发系列之十四:本地消息机制Native messagin
Chrome浏览器扩展开发系列之十四:本地消息机制Native messaging 2016-11-24 09:36 114人阅读 评论(0) 收藏 举报 分类: PPAPI(27) 通过将浏览器 ...
- Chrome浏览器扩展开发系列之十四:本地消息机制Native messaging
通过将浏览器所在客户端的本地应用注册为Chrome浏览器扩展的“本地消息主机(native messaging host)”,Chrome浏览器扩展还可以与客户端本地应用之间收发消息. 客户端的本地应 ...
- Chrome浏览器扩展开发系列之十九:扩展开发示例
翻译总结了这么多的官网内容,下面以一款博主开发的“沪深股票价格变化实时追踪提醒”软件为例,介绍Chrome浏览器扩展程序的开发,开发环境为Eclipse IDE+Chrome Browser. “沪深 ...
- Chrome浏览器扩展开发系列之十六:扩展中可用的Chrome浏览器API
除了Chrome浏览器支持的chrome.* API之外,Chrome浏览器扩展还可以使用Chrome浏览器为Web页面或Chrome app提供的APIs.对于Chrome浏览器2支持的API,还可 ...
- Chrome浏览器扩展开发系列之十八:扩展的软件国际化chrome.i18n API
i18n是internationalization 的简写,这里将讨论软件国际化的问题.熟悉软件国际化的朋友应该知道,软件国际化要求,页面中所有用户可见的字符串都必须置于资源属性文件中.资源属性文件中 ...
- Chrome浏览器扩展开发系列之十五:跨域访问的XMLHttpRequest对象
XMLHttpRequest对象是W3C的标准API,用于访问服务器资源.XMLHttpRequest对象支持多种文本格式,如XML和JSON等.XMLHttpRequest对象可以通过HTTP和HT ...
- Chrome浏览器扩展开发系列之十二:Content Scripts
Content Scripts是运行在Web页面的上下文的JavaScript文件.通过标准的DOM,Content Scripts 可以操作(读取并修改)浏览器当前访问的Web页面的内容. Cont ...
- Chrome浏览器扩展开发系列之十:桌面通知Notification
Desktop Notification也称为Web Notification,是在Web页面之外,以弹出桌面对话框的形式通知用户发生了某事件.Web Notification于2015.9.10成为 ...
- Chrome浏览器扩展开发系列之十一:NPAPI插件的使用
在Chrome浏览器扩展中使用HTML和JavaScript非常容易,但是如何重用已有的非JavaScript遗留系统代码呢?答案是将NPAPI插件绑定到Chrome浏览器扩展,从而实现在Chrome ...
随机推荐
- 小波说雨燕 第三季 构建 swift UI 之 UI组件集-视图集(三)Activity Indicators视图 学习笔记
当我们应用程序执行一个比较耗时的操作,我们需要给用户一个提示,那么这个提示比较好的方式方法呢就是 进度条 或者 一个齿轮转.我们就需要Activity Indicators组件 Indicato ...
- 二叉树 最近祖先lca + 两个结点的最小路径
http://www.acmerblog.com/distance-between-given-keys-5995.html lca在后序遍历中找, tralian算法还不会,懂了再补充 有了lca就 ...
- Nginx的安装与使用
在 CentOS 7 系统上: $ sudo rpm --import http://nginx.org/keys/nginx_signing.key $ sudo rpm -ivh http://n ...
- 将Session写入数据库
使用session_set_save_handler()函数,将Session的内容写入数据库 <?php /* *@author Fahy *@link http://home.cnblogs ...
- 烂泥:ubuntu中使用virt-manager图形化新建虚拟机
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 上一篇文章介绍了,如何在ubuntu下安装KVM的虚拟机管理器virt-manager,这篇文章我们来介绍,如何在图形界面下使用virt-manager ...
- esxi安装全过程及基本配置
esxi6.0下载地址 链接: http://pan.baidu.com/s/1jIfg2yU 密码: qacv 支持检测可以参考:http://www.linuxidc.com/Linux/2012 ...
- java Timer(定时调用、实现固定时间执行)
最近需要用到定时调用的功能.可以通过java的Timer类来进行定时调用,下面是有关Timer的一些相关知识. 其实就Timer来讲就是一个调度器,而TimerTask呢只是一个实现了run方法的一个 ...
- 【读书笔记《Android游戏编程之从零开始》】15.游戏开发基础(剪切区域)
剪切区域也称为可视区域,是由画布进行设置的:它指的是在画布上设置一块区域,当画布一旦设置了可视区域,那么除此区域外,绘制的任何内容都将看不到:可视区域可以是圆形.矩形等等. 画布提供了三种设置可视区域 ...
- Unity3D面试题汇总
1.请描述游戏动画有哪几种,以及其原理. 2.alpha blend 工作原理 3.写光照计算中的diffuse的计算公式 4.lod是什么,优缺点是什么 5.两种阴影判断的方法工作原理 6.MipM ...
- Jenkins遇到问题一:jenkins配置权限不对导致无法登陆或者空白页面解决办法
找到.jenkins/config.xml文件:替换为:1.<authorizationStrategy class="hudson.security.AuthorizationStr ...