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. jquery第四期:对象转换的小实例

    为了更清晰的看懂jquery对象是一个数组,我们这一期来改变每一个<li>中的值,在前面加上序号. 代码如下: <!DOCTYPE html PUBLIC "-//W3C/ ...

  2. 动态改变ComboBox下拉框的宽度

    在C++Builder中有时下拉框的内容比较长,标准长度下根本显示不完,可以调用PostMessage()方法来实现 ::PostMessage(comb->Handle,CB_SETDROPP ...

  3. leetcode 3Sum python

    # sort the array# loop from i = 0 # then left=i+1 right=len(nums)-1# try nums[i] - ( nums[left]+nums ...

  4. Linux学习之chkconfig命令

    chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息.谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接. 使用语法:chkconfig [--ad ...

  5. 常用js表单文本域验证

    1.验证是否为正确的邮箱地址 注意:本方法只能验证以@a.b结尾的邮箱地址,对于三级及三级以上的邮箱,比如@iie.ac.cn结尾的会出现错误 function isEmail(o){ var reg ...

  6. Python进阶之匿名函数(关键词lambda)

    匿名函数 .note-content {font-family: "Helvetica Neue",Arial,"Hiragino Sans GB"," ...

  7. querySelectorAll的BUG

    querySelector和querySelectorAll是W3C提供的新的查询接口 目前 IE8/9及Firefox/Chrome/Safari/Opera 的最新版已经支持它们. 但是Eleme ...

  8. 诞生于饭桌上的jcSQL语言

    相信每个Coder都有心在自己求学阶段可以写一门自己的语言,无论是毕业设计,还是课余爱好:不管是为了提升B格,还是想练手,抑或对其他语言不满,想自己撸一个,只要坚持下去了,都是不错的理由. 现在正值暑 ...

  9. MongoDB 从0开始

    MongoDB https://docs.mongodb.org/manual/tutorial/install-mongodb-on-os-x/ 在Mac上安装 brew update brew i ...

  10. oracle 高级分组

    oracle 高级分组 博客分类: 数据库基础 oraclesql  10.高级分组 本章目标: 对于增强的group by需要掌握: 1.使用rollup(也就是roll up累计的意思)操作产生s ...