Chrome NativeClient创建 (转)
Chrome NativeClient创建
该demo目标是让chrome扩展启动本地exe
1创建一个名叫nativeMsgDemo的控制台程序
#include <Windows.h>
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
bool RecieveMsgFromChrome();
int main(int argc, char* argv[])
{
while(1)
{
Sleep(300);
if (!RecieveMsgFromChrome())
break;
}
return 1;
}
生成的exe是nativeMsgDemo.exe
2. 扩展要写入的内容
在扩展的background.js中写入内容,这样chrome扩展支持nativeclient消息响应

var port = chrome.runtime.connectNative('com.wudi.chrome.namsg.yunzhou');
port.onMessage.addListener(function(msg) {
console.log("Received" + msg);
});
port.onDisconnect.addListener(function() {
console.log("Disconnected");
});
port.postMessage({ text: "Hello, my_application" });
3. chrome NativeMessagingHosts注册表文件
com.wudi.chrome.namsg.yunzhou写入注册表
HKEY_LOCAL_MACHINE\SOFTWARE\Google\Chrome\NativeMessagingHosts\com.wudi.chrome.namsg.yunzhou

通过这个注册表找到.json文件的路径
D:\projects\NativeMsgDEmo\output\com.wudi.chrome.namsg.yz-win.json,
在这个文件中保存了chrome.runtime.connectNative真正关联通讯的exe,文件内容如下:
{
"name": "com.wudi.chrome.namsg.yunzhou",
"description": "Chrome Native Messaging For yuzhou",
"path": "nativeMsgDemo.exe",
"type": "stdio",
"allowed_origins": [
"chrome-extension://hohonaplgfolmdaaafoddgbiakognoal/"
]
}
一般会将.json文件和.exe文件放在同一个目录下,方便找到,如下图:

然后让chrome加载我们的扩展,backgroud.html会加载backgroud.js,background.js中的chrome.runtime.connectNative会获取到和chrome通讯的exe,这种进程间通讯方式是标准的输入输出。
4. nativeClient .exe寻找流程
1. 通过background.js 中的var port =
chrome.runtime.connectNative('com.wudi.chrome.namsg.yunzhou');
查找注册表项HKEY_LOCAL_MACHINE\SOFTWARE\Google\Chrome\NativeMessagingHosts中的
com.wudi.chrome.namsg.yunzhou
2. 通过上述注册表项找到com.wudi.chrome.namsg.yz-win.json文件
3. 在com.wudi.chrome.namsg.yz-win.json文件中指定了连接输入输出的exe
Chrome NativeClient创建 (转)的更多相关文章
- chrome调试创建sq设备进行调试
工作中开发基于手机qq的webapp页面时,通常开发会对页面进行限制让用户通过手机qq访问,进行引导,如下图所示. 很多时候我们开发只是在手机展示,而在pc端进行调试,当开发加了这一层限制之后,就会导 ...
- 那些你不知道的chrome URLs
Xee:我用的是七星浏览器,因为我看了很多的浏览器,它们的版本都停滞不前了: 360安全浏览器的重度用户肯定不会对 se:last (上次未关闭页面)这个页面感到陌生,即使您没有见过这个,但也一定很熟 ...
- 【转】如何修改Chrome缓存目录的地址
本文转自:http://www.nowamagic.net/librarys/veda/detail/2573 C盘空间越来越小,在Win7里还标红了,心里看得不舒服,得想一些方法腾出一些空间.看了A ...
- chrome使用Timeline做性能分析
使用Timeline做性能分析 Timeline面板记录和分析了web应用运行时的所有活动情况,这是研究和查找性能问题的最佳途径.###Timeline面板概览 Timeline面板主要有三个部分构成 ...
- Ubuntu17安装Chrome有效
http://blog.csdn.net/NFMSR/article/details/78348000 1.进入 Ubuntu 16.04 桌面,按下 Ctrl + Alt + t 键盘组合键,启动终 ...
- [java] 在linux+chrome/firefox上使用java applet
我现在的浏览器用不了java applet,我的环境是archlinux + chrome or firefox. java网站的指引是这样说的 按照这些说明操作,以便在 Ubuntu Linux 上 ...
- Docker(九)-Docker创建Selenium容器
SeleniumHQ官方项目:https://github.com/seleniumHQ/docker-selenium 项目目前快速迭代中. Selenium 这里主要针对的是 Selenium G ...
- 百度搜索_Selenium WebDriver 环境搭建和错误调试_chromedriver_win32必须下载否则无法测试chrome
转自: http://www.360doc.com/content/14/0821/18/597197_403634783.shtml zTree 东西不多,我也一直使用着原始的人工测试手段,随着内 ...
- Ubuntu 16.04安装Chrome浏览器时提示:N: 忽略‘google-chrome.list.1’(于目录‘/etc/apt/sources.list.d/’),鉴于它的文件扩展名无效
使用终端安装谷歌浏览器时,它会自动在/etc/apt/sources.list.d/这个目录下添加google-chrome.list文件,但是如果它原来就有一个google-chrome.list的 ...
随机推荐
- adhoc-海量数据多维自助即席查询平台-mdrill项目开源啦
adhoc-海量数据多维自助即席查询平台-mdrill项目开源啦 1:mdrill是阿里妈妈-adhoc-海量数据多维自助即席查询平台下的一个子项目. 2:mdrill旨在帮助用户在几秒到几十秒的时间 ...
- arcgis for javascript之ArcGISDynamicMapServiceLayer图层控制的实现
图层控制是非常多GIS系统里面必须的一个小功能,本文就说说arcgis for javascript下ArcGISDynamicMapServiceLayer图层控制的实现方式.首先看图: 实现效果 ...
- LA - 5031 - Graph and Queries
题意:一个N个点(编号从1开始),M条边的无向图(编号从1开始),有3种操作: D X:把编号为X的边删了: Q X K:查询编号为X的结点所在连通分量第K大的元素: C X V:将编号为X的结点的权 ...
- meta标签的少许语法,慢慢收集中...
收集了一些meta的语法,也将不断的更新.不断做点滴的收集,总之,为了前端这些东西呀,我也是操碎了心... 1 <meta http-equiv="Content-Type" ...
- C趣味100道之58.拉丁方的一些想法。
题目如上. 思路(未写) 完整代码如下: #include<iostream> #include<queue> #include<math.h> using nam ...
- C++中,new/delete和malloc/free的区别
1.new/delete是C++的操作符,而malloc/free是C中的函数. 2.new做两件事,一是分配内存,二是调用类的构造函数:同样,delete会调用类的析构函数和释放内存.而malloc ...
- 学习使用GitHub(一)--之入门
因为经常Windows和linux系统交替的使用,在实验室一台电脑,在家一台电脑,自己的电脑和实验室的电脑上面的代码往往没法同步,以前由于种种原因(其实就是懒,没有学习GitHub这样的代码管理工具) ...
- Viewing the Raw SQL Statement(xcode で)
Thanks to Core Data. Even without learning SQL and database, you’re able to perform create, select, ...
- J2SE知识点摘记(十二)
1. File类 下面的构造方法可以用来生成File对象 File(String directoryPath) geName()用于返回文件名,getParent()返回父目录名,exist ...
- 与ARM7相比Cortex-M3优势明显