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创建 (转)的更多相关文章

  1. chrome调试创建sq设备进行调试

    工作中开发基于手机qq的webapp页面时,通常开发会对页面进行限制让用户通过手机qq访问,进行引导,如下图所示. 很多时候我们开发只是在手机展示,而在pc端进行调试,当开发加了这一层限制之后,就会导 ...

  2. 那些你不知道的chrome URLs

    Xee:我用的是七星浏览器,因为我看了很多的浏览器,它们的版本都停滞不前了: 360安全浏览器的重度用户肯定不会对 se:last (上次未关闭页面)这个页面感到陌生,即使您没有见过这个,但也一定很熟 ...

  3. 【转】如何修改Chrome缓存目录的地址

    本文转自:http://www.nowamagic.net/librarys/veda/detail/2573 C盘空间越来越小,在Win7里还标红了,心里看得不舒服,得想一些方法腾出一些空间.看了A ...

  4. chrome使用Timeline做性能分析

    使用Timeline做性能分析 Timeline面板记录和分析了web应用运行时的所有活动情况,这是研究和查找性能问题的最佳途径.###Timeline面板概览 Timeline面板主要有三个部分构成 ...

  5. Ubuntu17安装Chrome有效

    http://blog.csdn.net/NFMSR/article/details/78348000 1.进入 Ubuntu 16.04 桌面,按下 Ctrl + Alt + t 键盘组合键,启动终 ...

  6. [java] 在linux+chrome/firefox上使用java applet

    我现在的浏览器用不了java applet,我的环境是archlinux + chrome or firefox. java网站的指引是这样说的 按照这些说明操作,以便在 Ubuntu Linux 上 ...

  7. Docker(九)-Docker创建Selenium容器

    SeleniumHQ官方项目:https://github.com/seleniumHQ/docker-selenium 项目目前快速迭代中. Selenium 这里主要针对的是 Selenium G ...

  8. 百度搜索_Selenium WebDriver 环境搭建和错误调试_chromedriver_win32必须下载否则无法测试chrome

    转自:  http://www.360doc.com/content/14/0821/18/597197_403634783.shtml zTree 东西不多,我也一直使用着原始的人工测试手段,随着内 ...

  9. 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的 ...

随机推荐

  1. adhoc-海量数据多维自助即席查询平台-mdrill项目开源啦

    adhoc-海量数据多维自助即席查询平台-mdrill项目开源啦 1:mdrill是阿里妈妈-adhoc-海量数据多维自助即席查询平台下的一个子项目. 2:mdrill旨在帮助用户在几秒到几十秒的时间 ...

  2. arcgis for javascript之ArcGISDynamicMapServiceLayer图层控制的实现

    图层控制是非常多GIS系统里面必须的一个小功能,本文就说说arcgis for javascript下ArcGISDynamicMapServiceLayer图层控制的实现方式.首先看图: 实现效果 ...

  3. LA - 5031 - Graph and Queries

    题意:一个N个点(编号从1开始),M条边的无向图(编号从1开始),有3种操作: D X:把编号为X的边删了: Q X K:查询编号为X的结点所在连通分量第K大的元素: C X V:将编号为X的结点的权 ...

  4. meta标签的少许语法,慢慢收集中...

    收集了一些meta的语法,也将不断的更新.不断做点滴的收集,总之,为了前端这些东西呀,我也是操碎了心... 1 <meta http-equiv="Content-Type" ...

  5. C趣味100道之58.拉丁方的一些想法。

    题目如上. 思路(未写) 完整代码如下: #include<iostream> #include<queue> #include<math.h> using nam ...

  6. C++中,new/delete和malloc/free的区别

    1.new/delete是C++的操作符,而malloc/free是C中的函数. 2.new做两件事,一是分配内存,二是调用类的构造函数:同样,delete会调用类的析构函数和释放内存.而malloc ...

  7. 学习使用GitHub(一)--之入门

    因为经常Windows和linux系统交替的使用,在实验室一台电脑,在家一台电脑,自己的电脑和实验室的电脑上面的代码往往没法同步,以前由于种种原因(其实就是懒,没有学习GitHub这样的代码管理工具) ...

  8. Viewing the Raw SQL Statement(xcode で)

    Thanks to Core Data. Even without learning SQL and database, you’re able to perform create, select, ...

  9. J2SE知识点摘记(十二)

    1.      File类 下面的构造方法可以用来生成File对象 File(String directoryPath) geName()用于返回文件名,getParent()返回父目录名,exist ...

  10. 与ARM7相比Cortex-M3优势明显