2014-10-17 11:42 6753人阅读 评论(17) 收藏 举报
 分类:
Chrome Plugin

版权声明:本文为博主原创文章,未经博主允许不得转载。


示例 主要包含如下部分

com.google.chrome.demo-win.json
native_cmd.bat
manifest.json
popup.html
popup.js
 
功能简介:
   实现一个扩展,用户点击一个按钮后会启动本地的notepad程序(也可以为自己写的程序,这里示例就启动notepad,类似迅雷扩展的功能)
 
实现概述:
   通过启动本地的一个批处理来进而调用启动notepad.exe
拓展:
   可以将批处理换成自己写的程序,然后再在该程序中实现访问本地磁盘数据或者其它事

程序源码在网盘(Chrome Plugin目录下的Demo.rar):

http://pan.baidu.com/s/1hcVuQ

效果图:

部分代码:

manifest.json
  1. {
  2. //  Extension ID: ndnigonbfjhpjlcabmadmkpdcfomenlp
  3. "manifest_version": 2,
  4. "name": "Invoke Native Application",
  5. "description": "example",
  6. "version": "1.0",
  7. "browser_action": {
  8. "default_icon" : "icon.png",
  9. "default_popup": "popup.html"   //定义了点击扩展后显示的页面
  10. },
  11. "permissions": [
  12. "nativeMessaging"     //定义权限,需要和本地应用程序通信
  13. ]
  14. }
popup.js
  1. function updateResult(obj, state){
  2. document.getElementById(obj).innerHTML = state;
  3. }
  4. function invoke(){
  5. //hostName为注册表上项的名称
  6. var hostName = "com.google.chrome.demo";
  7. //启动本地应用程序
  8. var port = chrome.runtime.connectNative(hostName);
  9. updateResult("result1", "invoke..");
  10. }
  11. //为button1添加监听事件
  12. document.addEventListener('DOMContentLoaded', function() {
  13. document.querySelector('#button1').addEventListener(
  14. 'click', invoke);
  15. });
  16. com.google.chrome.demo-win.json
  17. {
  18. "name": "com.google.chrome.demo",
  19. "description": "Chrome Native Messaging API Example Host",
  20. //path 必须是绝对路径,指向要启动的程序
  21. "path": "D:\\Work\\Chrome plugin\\Native Messaging Example\\Demo\\native_cmd.bat",
  22. "type": "stdio",
  23. "allowed_origins": [
  24. "chrome-extension://niekdnkneilndiimkikogmplndpcfknp/"
  25. ]
  26. }
 
com.google.chrome.demo-win.json
  1. {
  2. "name": "com.google.chrome.demo",
  3. "description": "Chrome Native Messaging API Example Host",
  4. //path 必须是绝对路径,指向要启动的程序
  5. "path": "D:\\Work\\Chrome plugin\\Native Messaging Example\\Demo\\native_cmd.bat",
  6. "type": "stdio",
  7. "allowed_origins": [
  8. "chrome-extension://niekdnkneilndiimkikogmplndpcfknp/"
  9. ]
  10. }

native_cmd.bat
  notepad.exe
 
我的注册表导出的值(位置要注意下HEKY..):
 
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Google\Chrome\NativeMessagingHosts\com.google.chrome.demo]
@="D:\\Work\\Chrome plugin\\Native Messaging Example\\Demo\\com.google.chrome.demo-win.json"

======================2016.2.15 补充=============================================

之前有博友私信我关于不能启动的问题,这里是我疏忽了一个挺重要的步骤,就是权限问题。

在allowed_origins下的chrome-extension表示允许的插件。这串字母很重要,要和你安装的ID一致。如下,这个插件为hnaekmhaniojodkaageacnjfldljhiek,那么相对于安装的ID也是必须一致。

  1. "allowed_origins": [
  2. "chrome-extension://hnaekmhaniojodkaageacnjfldljhiek/"
  3. ]

这里涉及了插件打包的问题,顺便也提一下。

如下,选择打包扩展程序,其中根目录为插件所在位置,这样打包后会生成两个文件,一个pem密钥文件,另一个为crx安装程序。安装后可以看到插件的ID,然后复制下来到填上,再将crx安装程序删除,重新来打包一次,但是这一次下面的私有密钥文件要选择刚刚生成的。这样ID就对应了。

补充实现的由来:

这里对于当时我接到要写一个chrome插件任务的时候,那时候首次接触插件的时候,解决思路是先收集资料,然后确定采用Native Messaging方式来实现时,就查看相关文档以及官方Demo,然后再研究迅雷的插件,看看迅雷是如何调用起来的(不是研究源码,是看怎么关联起来的,如注册表),这个过程并不需要花多少时间,一周左右的时间。

实现chrome扩展启动本地进程 - 补充的更多相关文章

  1. 如何通过写一个chrome扩展启动本地程序

    @(编程) [toc] 本文介绍如何利用Chrome 的插件, 从我们的一个网站中启动一个我们的本地程序.本文的环境是windows10,本文的例子是通过点击网页上的一个button,调用本地的wor ...

  2. 一起来做chrome扩展《本地存储localStorage》

    chrome中的本地存储其实也是用的HTML5中localStorage,唯一区别是chrome扩展有自己的localStorage,它属于这个扩展,而不属于一个域名.得用这一点可以很好的处理扩展自己 ...

  3. 一起来做chrome扩展《AJAX请求》

    chrome在一次更新之后,出于安全考虑,完全的禁止了content_script从https向http发起ajax请求,即使正常情况下也会在console里给出提示.这对于WEB来讲是好事,但对于扩 ...

  4. Chrome 插件: 起动本地应用 (Native messaging)

    Chrome 插件: 起动本地应用 (Native messaging) www.MyException.Cn  网友分享于:2014-08-01  浏览:3次   Chrome 插件: 启动本地应用 ...

  5. 黄聪:chrome扩展开发《AJAX请求》

    chrome在一次更新之后,出于安全考虑,完全的禁止了content_script从https向http发起ajax请求,即使正常情况下也会在console里给出提示.这对于WEB来讲是好事,但对于扩 ...

  6. chrome浏览器插件启动本地应用程序

    chrome浏览器插件启动本地应用程序 2014-04-20 00:04:30|  分类: 浏览器插件|举报|字号 订阅     下载LOFTER我的照片书  |     chrome的插件开发这里就 ...

  7. Chrome扩展开发之三——Chrome扩展中的数据本地存储和下载

    目录: 0.Chrome扩展开发(Gmail附件管理助手)系列之〇——概述 1.Chrome扩展开发之一——Chrome扩展的文件结构 2.Chrome扩展开发之二——Chrome扩展中脚本的运行机制 ...

  8. 手把手教你Chrome扩展开发:本地存储篇

    手把手教你开发chrome扩展一:开发Chrome Extenstion其实很简单 手把手教你开发Chrome扩展二:为html添加行为 手把手教你开发Chrome扩展三:关于本地存储数据 HTML5 ...

  9. 手把手教你开发Chrome扩展三:关于本地存储数据

    手把手教你开发chrome扩展一:开发Chrome Extenstion其实很简单 手把手教你开发Chrome扩展二:为html添加行为 手把手教你开发Chrome扩展三:关于本地存储数据 HTML5 ...

随机推荐

  1. mac上的替代软件

    文本编辑器:bbedit 视频播放器:Movist 图片浏览:LilyView 远程桌面:Remotix 虚拟主机:parallels desktop svn client:cornerstone o ...

  2. iOS-UI分析利器--Reveal安装破解以及简单使用

    前言:在 iOS 开发中,我们有时很希望有一款类似 Web 开发中的 UI Debug 工具(例如:Firebug),让我们能够实时查看 UI 的结构,还可以实时更改某个 UIView 的位置和大小的 ...

  3. 怎样查看linux版本

    玩一台新的linux服务器,首先要做的,就是先看下是什么版本的系统: 命令如下: 登录到linux执行cat /etc/redhat-release ,例如如下: [root@3.5.5Biz-46 ...

  4. Effective Java 46 Prefer for-each loops to traditional for loops

    Prior to release 1.5, this was the preferred idiom for iterating over a collection: // No longer the ...

  5. 方程ax2+bx+c=0;一元二次方程。求根

    <body>方程ax2+bx+c=0;一元二次方程.求根请输入a:<input type="number" id="a"/><br ...

  6. 软件测试作业3--Junit、hamcrest、eclemmat的安装和使用

    1.   how to install junit, hamcrest and eclemma? 首先下载下来Junit和Hamcrest的jar包,然后新建项目的时候将这两个jar包导入到工程里面就 ...

  7. 编译时:virtual memory exhausted: Cannot allocate memory

    一.问题 当安装虚拟机时系统时没有设置swap大小或设置内存太小,编译程序会出现virtual memory exhausted: Cannot allocate memory的问题,可以用swap扩 ...

  8. C++杂谈(一)const限定符与const指针

    const限定符 c++有了新的const关键字,用来定义常变量,可以替C语言中的#define.关于const限定符,有以下需要注意: 1.创建后值不再改变 2.作用范围在文件内有效 3.添加ext ...

  9. sql 查询基本语法

    1.计算列        select * from emp           --*表示所有的           --from emp 表示从emp表查询   select empno,enam ...

  10. zoj 3229 Shoot the Bullet(无源汇上下界最大流)

    题目:Shoot the Bullet 收藏:http://www.tuicool.com/articles/QRr2Qb 把每一天看成一个点,每个女孩也看成一个点,增加源和汇s.t,源向每一天连上[ ...