实现chrome扩展启动本地进程 - 补充
版权声明:本文为博主原创文章,未经博主允许不得转载。
示例 主要包含如下部分
程序源码在网盘(Chrome Plugin目录下的Demo.rar):
效果图:
部分代码:
- {
- // Extension ID: ndnigonbfjhpjlcabmadmkpdcfomenlp
- "manifest_version": 2,
- "name": "Invoke Native Application",
- "description": "example",
- "version": "1.0",
- "browser_action": {
- "default_icon" : "icon.png",
- "default_popup": "popup.html" //定义了点击扩展后显示的页面
- },
- "permissions": [
- "nativeMessaging" //定义权限,需要和本地应用程序通信
- ]
- }
- function updateResult(obj, state){
- document.getElementById(obj).innerHTML = state;
- }
- function invoke(){
- //hostName为注册表上项的名称
- var hostName = "com.google.chrome.demo";
- //启动本地应用程序
- var port = chrome.runtime.connectNative(hostName);
- updateResult("result1", "invoke..");
- }
- //为button1添加监听事件
- document.addEventListener('DOMContentLoaded', function() {
- document.querySelector('#button1').addEventListener(
- 'click', invoke);
- });
- com.google.chrome.demo-win.json
- {
- "name": "com.google.chrome.demo",
- "description": "Chrome Native Messaging API Example Host",
- //path 必须是绝对路径,指向要启动的程序
- "path": "D:\\Work\\Chrome plugin\\Native Messaging Example\\Demo\\native_cmd.bat",
- "type": "stdio",
- "allowed_origins": [
- "chrome-extension://niekdnkneilndiimkikogmplndpcfknp/"
- ]
- }
- {
- "name": "com.google.chrome.demo",
- "description": "Chrome Native Messaging API Example Host",
- //path 必须是绝对路径,指向要启动的程序
- "path": "D:\\Work\\Chrome plugin\\Native Messaging Example\\Demo\\native_cmd.bat",
- "type": "stdio",
- "allowed_origins": [
- "chrome-extension://niekdnkneilndiimkikogmplndpcfknp/"
- ]
- }
[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也是必须一致。
- "allowed_origins": [
- "chrome-extension://hnaekmhaniojodkaageacnjfldljhiek/"
- ]
这里涉及了插件打包的问题,顺便也提一下。
如下,选择打包扩展程序,其中根目录为插件所在位置,这样打包后会生成两个文件,一个pem密钥文件,另一个为crx安装程序。安装后可以看到插件的ID,然后复制下来到填上,再将crx安装程序删除,重新来打包一次,但是这一次下面的私有密钥文件要选择刚刚生成的。这样ID就对应了。
补充实现的由来:
这里对于当时我接到要写一个chrome插件任务的时候,那时候首次接触插件的时候,解决思路是先收集资料,然后确定采用Native Messaging方式来实现时,就查看相关文档以及官方Demo,然后再研究迅雷的插件,看看迅雷是如何调用起来的(不是研究源码,是看怎么关联起来的,如注册表),这个过程并不需要花多少时间,一周左右的时间。
实现chrome扩展启动本地进程 - 补充的更多相关文章
- 如何通过写一个chrome扩展启动本地程序
@(编程) [toc] 本文介绍如何利用Chrome 的插件, 从我们的一个网站中启动一个我们的本地程序.本文的环境是windows10,本文的例子是通过点击网页上的一个button,调用本地的wor ...
- 一起来做chrome扩展《本地存储localStorage》
chrome中的本地存储其实也是用的HTML5中localStorage,唯一区别是chrome扩展有自己的localStorage,它属于这个扩展,而不属于一个域名.得用这一点可以很好的处理扩展自己 ...
- 一起来做chrome扩展《AJAX请求》
chrome在一次更新之后,出于安全考虑,完全的禁止了content_script从https向http发起ajax请求,即使正常情况下也会在console里给出提示.这对于WEB来讲是好事,但对于扩 ...
- Chrome 插件: 起动本地应用 (Native messaging)
Chrome 插件: 起动本地应用 (Native messaging) www.MyException.Cn 网友分享于:2014-08-01 浏览:3次 Chrome 插件: 启动本地应用 ...
- 黄聪:chrome扩展开发《AJAX请求》
chrome在一次更新之后,出于安全考虑,完全的禁止了content_script从https向http发起ajax请求,即使正常情况下也会在console里给出提示.这对于WEB来讲是好事,但对于扩 ...
- chrome浏览器插件启动本地应用程序
chrome浏览器插件启动本地应用程序 2014-04-20 00:04:30| 分类: 浏览器插件|举报|字号 订阅 下载LOFTER我的照片书 | chrome的插件开发这里就 ...
- Chrome扩展开发之三——Chrome扩展中的数据本地存储和下载
目录: 0.Chrome扩展开发(Gmail附件管理助手)系列之〇——概述 1.Chrome扩展开发之一——Chrome扩展的文件结构 2.Chrome扩展开发之二——Chrome扩展中脚本的运行机制 ...
- 手把手教你Chrome扩展开发:本地存储篇
手把手教你开发chrome扩展一:开发Chrome Extenstion其实很简单 手把手教你开发Chrome扩展二:为html添加行为 手把手教你开发Chrome扩展三:关于本地存储数据 HTML5 ...
- 手把手教你开发Chrome扩展三:关于本地存储数据
手把手教你开发chrome扩展一:开发Chrome Extenstion其实很简单 手把手教你开发Chrome扩展二:为html添加行为 手把手教你开发Chrome扩展三:关于本地存储数据 HTML5 ...
随机推荐
- iOS开发之网络数据解析--GDataXML解析框架的使用
前言:GDataXML是google基于C语言libxml2写的第三方框架,该源码文件就一个类,看其源码,基本使用了C语言的底层的很多lib编译库代码,所以刚导入使用,会报错提示需要设置导入需要的 ...
- Jmeter组件执行顺序与作用域
一.Jmeter重要组件: 1)配置元件---Config Element: 用于初始化默认值和变量,以便后续采样器使用.配置元件大其作用域的初始阶段处理,配置元件仅对其所在的测试树分支有效,如,在同 ...
- 线程本地存储TLS(Thread Local Storage)的原理和实现——分类和原理
原文链接地址:http://www.cppblog.com/Tim/archive/2012/07/04/181018.html 本文为线程本地存储TLS系列之分类和原理. 一.TLS简述和分类 我们 ...
- 有关RDS上只读实例延时分析-同适用于自建MySQL主从延时分析判断
个人不是很喜欢在技术上跟人互喷,尤其是不在同一个岗位上的人.一方面本人的性格如此,另一方面,我自身的口水也确实是不行,人生经历了第一次的双11洗礼,在大促的环境下,总算知道了有些东西是否应该规避,这次 ...
- 基于python的flask的应用实例注意事项
1.所有的html文件均保存在templates文件夹中 2.运行网页时python manage.py runserver
- [工具] 分布式系统下批量创建用户及分发公钥打通ssh通道的脚本
在分布式系统下偶尔会有这样的需求,要增加一个服务时,需要在集群的所有节点上创建同一个用户,然后打通ssh通道,再分发软件包.配置.执行命令.启动服务... 这个问题的根源是如何集中配置和管理系统,专业 ...
- pushd
# MAN 手册原文: pushd [-n] [+n] [-n] pushd [-n] [dir] Adds a directory to ...
- 再学TSQL基础--单表查询
本内容是我学习tsql2008的阅读笔记 什么是关系模型? 若对列创建唯一约束,背后中的物理机制也是创建了一个唯一索引. SQL语句的逻辑解析顺序是FROM WHERE GROUP BY HAVING ...
- Geoserver发布WMS服务出错分析
使用Geoserver发布一个空间表,在图层预览的过程中没有任何问题,但是当我根据这个空间表传创建视图再发布wms服务,访问时就会报错,错误信息如下: Caused by: java.sql.SQLE ...
- Zbrush 4R7 P3中各类模型怎么快速隐藏
在ZBrush®软件中除了遮罩功能可以对模型局部进行编辑外,我们还可以通过显示和隐藏来对模型的局部进行控制. 查看更多内容请直接前往:http://www.zbrushcn.com/jichu/xia ...