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. Objective-C之Block

    Block基本概念 本小节知识点: [了解]什么是Block [理解]block的格式 1.什么是Block Block是iOS中一种比较特殊的数据类型 Block是苹果官方特别推荐使用的数据类型, ...

  2. js 毫秒 转 时间 日期 yyyy-mm-dd hh-mm-ss

    //格式化时间 var format = function(time, format){ var t = new Date(time); var tf = function(i){return (i ...

  3. MySQL添加字段和删除字段

    MySQL添加字段应该如何实现呢?这是很多刚刚接触MySQL数据库的新人都提到过的问题,下面就为您介绍MySQL添加字段和删除字段的方法,希望对您能有所启迪. MySQL添加字段: alter tab ...

  4. 转 HighCharts笔记之: Bar Chart

    最近需要做一些Web图标,研究了几个开源的第三方工具后,最后决定使用HighCharts开发: Highcharts 是一个用纯JavaScript编写的一个图表库, 能够很简单便捷的在web网站或是 ...

  5. Web Service中的几个重要术语

    WSDL:web service definition language 直译:WebService定义语言 1.对应一种该类型的文件.WSDL 2.定义了Web Service的服务器与客户端应用交 ...

  6. Swing应用开发实战系列之四:组件内容实时刷新问题

    窗口组件动态刷新问题,在dotnet中根本不算什么问题,用几句代码很轻松就能搞定,但是在Swing中,实现动态刷新组件内容却是一件颇为吃力的事情.譬如针对我们经常用到的刷新JLable.JTextFi ...

  7. 超链接的那些事(三): 属性target

    a标签的属性之一 target 1. 定义     规定在何处打开链接文档. 如果a标签中有target属性,浏览器将会载入和显示用这个标签的 href 属性命名的.名称与这个目标吻合的框架或者窗口中 ...

  8. MyEclipse10 离线图文安装SVN插件教程

    一.下载SVN插件subclipse 1.下载 下载地址:http://subclipse.tigris.org/servlets/ProjectDocumentList?folderID=2240 ...

  9. Linux系统命令查询软件包

    转载自:http://blog.chinaunix.net/uid-346158-id-2131252.html,http://www.jb51.net/os/RedHat/1102.html, 一. ...

  10. Semiconnected--强连通缩点

    1451: Semiconnected 时间限制: 1 Sec  内存限制: 32 MB 提交: 79  解决: 20 题目描述 For a directed graph G = (V, E), if ...