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. 抓包工具charles使用教程指南

    0x01 前言: Charles是一款抓包修改工具,相比起burp,charles具有界面简单直观,易于上手,数据请求控制容易,修改简单,抓取数据的开始暂停方便等等优势!下面来详细介绍下这款强大好用的 ...

  2. PS网页设计教程XXVII——设计一个大胆和充满活力的作品集

    作为编码者,美工基础是偏弱的.我们可以参考一些成熟的网页PS教程,提高自身的设计能力.套用一句话,“熟读唐诗三百首,不会作诗也会吟”. 本系列的教程来源于网上的PS教程,都是国外的,全英文的.本人尝试 ...

  3. 【整理贴】DBA-常用到的动态视图分析语句

    测试应用环境:SQL2008 R2.SQL2012.SQL2014 --语句1:获取前20逻辑读取次数或逻辑写入次数或CPU 时间 SELECT TOP 20 SUBSTRING(qt.TEXT, ( ...

  4. 查看mysql主从配置的状态及修正 slave不启动问题

    1.查看master的状态 mysql> show master status;  //Position不应该为0 mysql> show processlist;  //state状态应 ...

  5. asp.net连接SQL SERVER 2012的方法

    在web.config文件中添加 <connectionStrings> <add name="SQLConnectionString" connectionSt ...

  6. Linux traceroute

    一.简介 traceroute 通过发送 TCP 数据包向目标端口进行探测,以检测源到目标服务器的整个链路上相应端口的连通性情况.   二.语法 -n 直接使用IP地址而非主机名称(禁用 DNS 反查 ...

  7. MySQL中EXPLAIN的解释

    EXPLAIN是查看MySQL优化器如何决定执行查询的主要方法,这个功能具有局限性,以为它并总是会说出真相,但是却可以获得最好信息. 学会解释EXPLAIN,你就会了解MySQL优化器是如何工作,你才 ...

  8. NOIP2008普及组传球游戏(动态规划)——yhx

    题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏. 游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球,每个同 ...

  9. 测试思考[持续更新ing]

    1.如何设计好的测试用例,提高测试覆盖率?提高测试效率? 2.如何展现测试成果? 3.如何编写专业化.优质的测试文档? 4.如何适时借助测试工具,测试一些重复性比较高的测试? 5.如何引入自动化测试? ...

  10. bfs简单题-poj2251

    宽搜基础题 思路很简单,注意细节. 走过的节点一定要打上标记//tag数组 三维字符串输入一定要注意 #include <stdio.h> #include <iostream> ...