实现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 ...
随机推荐
- Effective Java 01 Consider static factory methods instead of constructors
Advantage Unlike constructors, they have names. (BigInteger.probablePrime vs BigInteger(int, int, Ra ...
- ASP.NET MVC 在WebService中Token的使用方法
最近发现公司接口的验密方式很简单,就是简单的用户名密码校验.客户方面的负责人说要修改一下,所以想起了微信的验证密码的方式故写了这个Demo以供大家学习参考: 接口:WebService 方式:Toke ...
- 问题解决——OpenGL超级宝典 第四章 4.5.2 关于freeglut.lib问题的解决过程
看<OpenGL超级宝典(第四版)>的4.5.2节时遇到了一系列问题,经过不懈努力终于解决,现将过程记录在下,以便查找追思. 在第4.5.2节之前,自己写的的代码都没有使用作者的gltoo ...
- CentOS 7 修改时区(转)
本文转载至:http://mathslinux.org/?p=637 Linux 系统(我特指发行版, 没说内核) 下大部分软件的风格就是不会仔细去考虑向后 的兼容性, 比如你上个版本能用这种程序配置 ...
- Android 开发之 Android 开发的起步
前言 Android 开发的起步 我们可以先来看看百科上面怎么说? 百度百科上 Android的介绍 一.Windows环境下在线搭建Android环境. 1. 下载 Android开发工具. JD ...
- 烂泥:kickstart无人值守安装CentOS6.5
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 在本次实验进行之前,首先我们要把公司的网络环境进行介绍. 注意这个网络拓扑图,也是生产环境的一个实例.同时服务器192.168.1.214已关闭ipta ...
- poj 2391 Ombrophobic Bovines(最大流+floyd+二分)
Ombrophobic Bovines Time Limit: 1000MSMemory Limit: 65536K Total Submissions: 14519Accepted: 3170 De ...
- js动态切换图片
<script language =javascript > $(function () { initAds(); }); function initAds() { var curInde ...
- OO的设计原则
今天同事和我们一起讨论分享了OO的设计原则,讨论使人明晰,有人一起讨论学习是一件幸福的事情. 1.开闭原则 对功能的扩展是开放的,对修改是闭合的. 可以应用于类的设计,框架的设计等. 为什么?开闭原则 ...
- hiveql basic
set hive.cli.print.current.db=true; set hive.mapred.mode=strict; set hive.mapred.mode=nonstrict; SHO ...