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. 如何写BaseDomain

    上图摘自<Spring3.x企业应用开发实战> 提到了使用org.apache.commons.lang3.builder ToStringBuilder进行toString方法的统一. ...

  2. Modernizr的介绍和使用

    传统浏览器目前不会被完全取代,令你难以将最新的 CSS3 或 HTML5 功能嵌入你的网站. Modernizr 正是为解决这一难题应运而生,作为一个开源的 JavaScript 库,Moderniz ...

  3. SQL 注入防御方法总结

    SQL 注入是一类危害极大的攻击形式.虽然危害很大,但是防御却远远没有XSS那么困难. SQL 注入可以参见:https://en.wikipedia.org/wiki/SQL_injection S ...

  4. easyui的datagrid实例实现

    功能要求如图所示: function Loading() { var editRow = undefined;//保存行的索引 var query= $("#myform").se ...

  5. 使用TRACE时 输出 _CrtDbgReport: String too long or IO Error

    在VS2010中使用MFC,使用UNICODE 调用TRACE,输出_CrtDbgReport: String too long or IO Error 可尝试使用OutputDebugString函 ...

  6. cocos2d-x之首选项数据初试

    bool HelloWorld::init() { if ( !Layer::init() ) { return false; } Size visibleSize = Director::getIn ...

  7. Android开发之 Android应用程序详细解析

    我们继续的沿用上一篇所建立的应用. Android应用程序可以分为:应用程序源代码(.java),应用程序描述文件(.xml),各种资源. 可以这么理解: 安卓应用程序,通过java代码来实现其业务逻 ...

  8. 第一章 Spring Security是什么?

    1. 介绍 1.1 Spring Security是什么? Spring Security是一个强大的和高度可定制的身份验证和访问控制框架. 它是保证基于spring的应用程序安全的实际标准. 1.2 ...

  9. Merge Two Sorted Lists

    Merge Two Sorted Lists https://leetcode.com/problems/merge-two-sorted-lists/ Merge two sorted linked ...

  10. hdu 2196 Computer(树形DP)

    Computer Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...