chrome浏览器插件启动本地应用程序

2014-04-20 00:04:30|  分类: 浏览器插件|举报|字号 订阅

下载LOFTER 我的照片书  |

chrome的插件开发这里就不多讲了,本篇文章只讲如何调用谷歌浏览器的api启动本地的程序并与之通信

要启动本地的应用插件需要包括两部分的内容:
1)安装到浏览器的插件部分
2)放置在本地的json文件
第一部分就跟普通的谷歌浏览器插件是一样的,包括两个必须的文件:
1)background.js(名字不一定为background.........取你自己喜欢的也行)
2)manifest.json(这个名字就是固定的了.............取你自己喜欢的不行)
在谷歌浏览器中输入chrome://extensions/->勾选开发者模式->加载正在开发的扩展程序->选择你的扩展程序所在的文件夹(就是那个js文件和manifest.json所在文件夹)
现在,你的扩展程序已经加载到你的浏览器当中了
我们再看看manifest.json的内容:

{
"name" : "FastDownload",
"version" : "1.0.1",
"description" : "Get file download link fo Point",
"background" : { "scripts": ["background.js"] },
"permissions" : [
"nativeMessaging",
"contextMenus",
"downloads",
"tabs",
"http://*/*",
"https://*/*"
],
"minimum_chrome_version" : "6.0.0.0",
"manifest_version": 2
}

主要的是permissions那一项,因为,添加了"nativeMessaging"这一项是更本地应用程序通信的权限(新版的chrome建议使用这种方式),这样就可以跟本地的应用程序通信了

background的scripts就是刚才讲的那个script了
我们再看看这个background.js的内容:

//Author: match.yangwanqing
//Date: 2014.3.12
//Description: This is a javaScript file use for handle contextMenus action
//When click the contextMenus, it will sent the infomation to native app

//connect to native app
var port = null;
var nativeHostName = "fastdownload";//这个后面会讲,是chrome与本地程序通信的桥梁
var downloadID = null;

function getDownloadID(URL)
{
/*chrome.downloads.download({"url": URL},
function(tmpDownloadID)
{
downloadID = tmpDownloadID;
});*/
//chrome.downloads.cancel({"downloadid": downloadID});
chrome.downloads.search({"url": URL},
function(tmpID)
{
alert(tmpID[0].id +
"#" + tmpID[0].totalBytes +
"#" + tmpID[0].mime);
});
}

//onNativeDisconnect
function onDisconnected()
{
//alert("连接到FastDownload服务失败: " + chrome.runtime.lastError.message);
port = null;
}

//connect to native host and get the communicatetion port
function connectToNativeHost()
{
port = chrome.runtime.connectNative(nativeHostName);//根据配置文件连接到本地程序
port.onDisconnect.addListener(onDisconnected);
}

//调用connectToNativeHost函数连接到本地程序,完成后使用port.postMessage函数即可

//将信息写入I/O流与本地程序通信
function getClickHandler() {
return function(info, tab) {
connectToNativeHost();
//getDownloadID(info.linkUrl);
port.postMessage(info.linkUrl);
};
};

//在浏览器启动时即创建右键菜单,当点击使用Point下载的时候就会调用getClickHandler()函数处理

//信息并与本地程序通信
chrome.contextMenus.create({
"title" : "使用Point下载",
"type" : "normal",
"id": "FastDownloadMenu",
"contexts" : ["link"],
//"targetUrlPatterns":["*://*/*.*"],
"enabled": true,
"onclick" : getClickHandler()
});

上面说的这么神秘的配置文件就是最开始说到的第二部分:

fastdownload.json
我使用的测试环境是opensuse,ubuntu还有linuxdeepin,都是linux操作系统
我们需要新建一个路径
/etc/opt/chrome/native-messaging-hosts/
然后将fastdownload.json拷贝到该路径下,我们的插件在权限中加入"nativeMessaging"权限后就会到这个路径查找相应的配置文件,拷贝完成后记得保证该文件可以让其他人有读的权限,不然插件就会报找不到制定host的错误,因为它没有权限读取配置文件
注意该文件的名字中不能使用大写字母,只能使用小写字母加上"."这些符号进行命名
我们看一下这个配置文件(配置文件的叫法并不准确,暂且这么叫吧,大家理解就好,具体看官方说明)的内容:

{
"name": "fastdownload",
"description": "Chrome sent download url to native app.",
"path": "/home/yang/QtWork…wnloadPopup/build/home/yang/QtWork…wnloadPopup/build/FastDownloadPopup",
"type": "stdio",
"allowed_origins": [
"chrome-extension://iebejdppbfamhgbnpoacblnlhpllanfbs/"

]
}

其中,name的内容就是刚才backgroound.js中的那个nativeHostName变量的值

"description",随便你写,关于这个文件的描述
path,这个是重点,就是你的可执行文件所在的路径,一定要绝对路经(windows的好像不用,没试过),一定要确保权限可读,不然你还是没法启动该程序并与之通信
type就是数据的通信方式,目前只能是通过I/O流的方式,所以值只能是“stdio”
allowed_origins,这个就是允许谁访问啦,我们这里只允许ID为iebejdppbfamhgbnpoacblnlhpllanfbs的插件访问
注意,插件的ID会在你改变了存放路径等一些信息后有所改变,所以一定要确保配置文件所写的ID跟你的扩展插件的ID是相同的,至此,整个插件的内容就算完成了,在谷歌浏览器中右键看看效果吧!
下面给出c++中接受数据的代码:

unsigned int length = 0;

    //read the first four bytes (=> Length)
    //getwchar: receive char from stdin
    //putwchar: write char to stdout
    for (int i = 0; i < 4; i++)
    {
        length += getwchar();
    }
    //read the json-message
    fileURL = "";
    for (int i = 0; i < length; i++)
    {
        fileURL += getwchar();
    }
    //浏览器端传来的数据会有一个双引号引在两端
    fileURL = fileURL.mid(1,fileURL.length()-2);

这段代码可以放在main函数中也可以放在其他函数中,发挥你的想象吧!当然读取的方式不止这一种,具体需求因人而异

(原创作品,欢迎转载,转载请注明出处,请尊重作者的劳动成果 I Match)

转载于:https://www.cnblogs.com/developer-ios/p/6057956.html

chrome浏览器插件启动本地应用程序相关推荐

  1. 2021年10款优质Chrome浏览器插件推荐

    Chrome插件像一个个小帮手,帮我们提升效率,完成一些有价值的事情.其实有很多这样的优质实用插件,很多人并不知道它们的存在,下面就特意为大家整理10款非常有用的插件. 1.哔哩哔哩助手:B站扩展程序 ...

  2. 使用 Chrome 浏览器插件 Web Scraper 10分钟轻松实现网页数据的爬取

    web scraper 下载:Web-Scraper_v0.2.0.10 使用 Chrome 浏览器插件 Web Scraper 可以轻松实现网页数据的爬取,不写代码,鼠标操作,点哪爬哪,还不用考虑爬 ...

  3. 如何查看chrome浏览器插件位置

    文章目录 一.文章参考 二.问题描述 三.解决办法 一.文章参考 如何查看chrome浏览器插件位置 二.问题描述 最近在学习Vue3的语法知识,其中需要安装chrome开发调试插件,由于网络的原因, ...

  4. Lightshot(轻量屏幕截图工具)绿色中文版-支持chrome浏览器插件

    Lightshot是一款专门为PC平台用户打造的屏幕截图工具,可供用户随意的截取电脑屏幕中的任何区域,截取的图片可快速不失帧的保存.在游戏中精彩的操作.电影视频中的搞笑片段.有趣的表情包.唯美的风景图 ...

  5. Chrome浏览器插件新建标签页插件Momentum

    插件下载 https://download.csdn.net/download/badao_liumang_qizhi/10742494 插件使用 下载压缩包,解压. 打开Chrome浏览器-右上角设 ...

  6. Chrome浏览器插件Postman用法简介-Http请求模拟工具

    在我们平时开发中,特别是需要与接口打交道时,无论是写接口还是用接口,拿到接口后肯定都得提前测试一下,这样的话就非常需要有一个比较给力的Http请求模拟工具,现在流行的这种工具也挺多的,像火狐浏览器插件 ...

  7. 浏览器插件自动点击程序

    浏览器插件自动点击程序 合理的创建标题,有助于目录的生成 如何改变文本的样式 插入链接与图片 如何插入一段漂亮的代码片 生成一个适合你的列表 创建一个表格 设定内容居中.居左.居右 SmartyPan ...

  8. 使用chrome浏览器插件postman模拟post、get请求

    使用chrome浏览器插件postman模拟post.get请求 postman为chrome浏览器的一个插件,用来模拟post请求,get请求等.可以在chrome浏览器里安装插件(前提是你得访问了 ...

  9. Chrome浏览器插件导出与导入

    一.Chrome浏览器插件导入 (一)将Edge浏览器插件导入Chrome 1.首先找到Edge浏览器插件安装路径: C:\Users\用户名\AppData\Local\Microsoft\Edge ...

最新文章

  1. 假3D场景逼真到火爆外网!超1亿像素无死角,被赞AI渲染新高度
  2. 两个函数彻底理解Lua中的闭包
  3. 布隆过滤器、一致性哈希算法总结
  4. 提高办公效率的个Excel技巧,告别苦加班!
  5. SQL2000: MMC 不能打开文件
  6. SAP Fiori 修改catalog group名称的技术实现
  7. data transformation python_Python 编码为什么那么蛋疼?
  8. 计算机在我国开始被应用于,计算机应用推动自动化与信息化的发展
  9. ShadeGraph教程之节点详解5:Math Nodes
  10. JavaScript和jQuery的DOM操作
  11. HTML→标签、div语义化、表单、input标签
  12. 前端开发的模块化和组件化的定义,以及两者的关系?
  13. 一个layer可以跟着画完的线移动ios程序 好玩啊。
  14. 计算机查看图片的打开方式,windows10电脑怎么在右键菜单打开方式添加照片查看器...
  15. L44.linux命令每日一练 -- 第七章 Linux用户管理及用户信息查询命令 -- su和visudo
  16. 精通 Python 网络爬虫:核心技术、框架与项目实战
  17. 2020城市大脑与超级智能建设规范研究报告(附下载)
  18. ACM-ICPC国际大学生程序设计竞赛北京赛区(2015)网络赛 Scores
  19. Gateway服务网关使用教程
  20. R语言ggplot2可视化:使用patchwork包的align_patches函数将多个可视化图像对齐(align all plots)

热门文章

  1. Intel e1000 网卡
  2. Deep Multi-Task Multi-Channel Learning for Alzheimer's Disease Diagnosis(阿尔兹海默症诊断)
  3. 求直角三角形的斜边长
  4. 『网络爬虫』买车比价,自动采集某车之家各车型裸车价
  5. JavaScript charCodeAt() 方法
  6. 适合自己的书只能靠自己找
  7. [附源码]JAVA+ssm计算机毕业设计仓库物资信息可视化管理系统(程序+Lw)
  8. 物联网工程规划与设计
  9. html双击事件 jq,jQ双击事件用原生写的方法.html
  10. ansible firewalld 模块