谷歌chrome 插件(扩展)开发——基础篇
公司需要开发chrome浏览器右键菜单功能,点击后可传页面的相关参数与客户端(winform)交互。
我对chrome扩展一无所知,所以第一阶段,我称之为”扫盲”。也就是先找些相关资料,了解下情况。我在网上看到一篇题为:【干货】Chrome插件(扩展)开发全攻略 的文章,里面的知识点覆盖面广,很全,我把它当字典去查。然后把博主提供的例子下载下来运行。主要看看人家是怎么做的。我需要的右键菜单,demo里有。但是如何与客户端交互,这个倒没有。还需要查看更多的资料。
要查看资料,我建议首选官网。谷歌由于退出中国市场后,我们就无法直接访问到其提供的资料了。那怎么办呢?想到一个词:翻墙。尝试了很久,也没有翻出去。后来,安装了qq浏览器,在应用中心搜索了谷歌上网助手,如图:

在它上面注册个账号,试用期是3天。我担心3天后,怎么办,是不是免费用不了呢?结果如下:

看到这个,我喜出望外。我用的就是谷歌,其它的外文网站,我现在不需要。
终于把找资料的通道给打通了。
第二阶段,我认为拿到例子需要多看看,照着敲敲,甚至调试调试,修改修改。熟悉chrome扩展的开发方式以及它的目录组织结构,理解一些基本概念。
麻雀虽小,五脏俱全。官网上有一个 popup (弹出下拉页面)的例子,功能很简单,就是给网页换背景。我们一起来看看它的实现:

这个目录中,它的配置文件:manifest.json 是最重要的:
{
"name": "A browser action with a popup that changes the page color",
"description": "Change the current page color",
"version": "1.0",
"permissions": [
"tabs", "http://*/*", "https://*/*"
],
"browser_action": {
"default_title": "Set this page's color.",
"default_icon": "icon.png",
"default_popup": "popup.html"
},
"manifest_version":
}
第8行,browser_action 经常拿来和page_action做比较,其含义一目了然。值的注意的是第5行的permissions,tabs权限的理解:

那么http和https,怎么理解呢?


顺便提一下,stackoverflow上有很多实用的答案,说明高人比较多。我们得有英文的底子,这样不至于阅读起来吃力。
通过这样去研究,你就会明白,哦,权限配置原来如此,为啥要配置呢?这是因为我们的插件需要去访问人家。好比你去拜访某个朋友,提前打个招呼,取得同意后再去,以免被拒之门外。
popup.html,这是个普普通通的html页面,它包含了popup.js。这个js是个关键:
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. function click(e) {
chrome.tabs.executeScript(null,
{code:"document.body.style.backgroundColor='" + e.target.id + "'"});
window.close();
} document.addEventListener('DOMContentLoaded', function () {
var divs = document.querySelectorAll('div');
for (var i = 0; i < divs.length; i++) {
divs[i].addEventListener('click', click);
}
});
这个js的第8行和12行有两个document,它们不是同一个对象。第12行的document是popup.html中的Dom对象。而第8行中的document.body,调用的是浏览器原本打开的html的Dom对象。这段功能:给popup页面中的div添加click事件。如下图:


经过页面审查,发现它们的Id就是颜色,这就不难理解第8行的e.target.id。我们打开百度页面,点击插件,在弹出的页面中,选择green,那么百度页面就会变背景色。

demo下载地址 ,setpageColor是该插件的目录文件
谷歌chrome 插件(扩展)开发——基础篇的更多相关文章
- Chrome插件(扩展)开发全攻略
[干货]Chrome插件(扩展)开发全攻略:https://www.cnblogs.com/liuxianan/p/chrome-plugin-develop.html
- 【干货】Chrome插件(扩展)开发全攻略(不点进来看看你肯定后悔)
写在前面 我花了将近一个多月的时间断断续续写下这篇博文,并精心写下完整demo,写博客的辛苦大家懂的,所以转载务必保留出处.本文所有涉及到的大部分代码均在这个demo里面:https://github ...
- 【干货】Chrome插件(扩展)开发全攻略
写在前面 我花了将近一个多月的时间断断续续写下这篇博文,并精心写下完整demo,写博客的辛苦大家懂的,所以转载务必保留出处.本文所有涉及到的大部分代码均在这个demo里面:https://github ...
- 【干货】Chrome插件(扩展)开发全攻略(转)
写在前面 我花了将近一个多月的时间断断续续写下这篇博文,并精心写下完整demo,写博客的辛苦大家懂的,所以转载务必保留出处.本文所有涉及到的大部分代码均在这个demo里面:https://github ...
- 开发chrome插件(扩展)
官方文档 https://developer.chrome.com/extensions/getstarted.html [干货]Chrome插件(扩展)开发全攻略 http://blog.haoji ...
- Chrome插件(扩展)
[干货]Chrome插件(扩展)开发全攻略 写在前面 我花了将近一个多月的时间断断续续写下这篇博文,并精心写下完整demo,写博客的辛苦大家懂的,所以转载务必保留出处.本文所有涉及到的大部分代码均 ...
- Chrome浏览器扩展开发系列之十四:本地消息机制Native messagin
Chrome浏览器扩展开发系列之十四:本地消息机制Native messaging 2016-11-24 09:36 114人阅读 评论(0) 收藏 举报 分类: PPAPI(27) 通过将浏览器 ...
- Chrome浏览器扩展开发系列之十四
Chrome浏览器扩展开发系列之十四:本地消息机制Native messaging 时间:2015-10-08 16:17:59 阅读:1361 评论:0 收藏:0 ...
- Android应用开发基础篇(1)-----Button
Android应用开发基础篇(1)-----Button 一.概述 Button,顾名思义就是按钮的意思,它主要的功能是响应用户按下按钮时的动作. 二.应用 新建一个工程, ...
随机推荐
- linux下卸载已安装的软件
1.先查询该软件是否安装,是否存在 rpm -qa | grep -i teamview 2.根据一中的结果(软件包名称),执行如下命令 rpm -e [软件包名]
- [原创]ubuntu14.04部署ELK+redis日志分析系统
ubuntu14.04部署ELK+redis日志分析系统 [环境] host1:172.17.0.4 搭建ELK+redis服务 host2:172.17.0.3 搭建logstash+nginx服务 ...
- CentOS 挂载 cdrom, iso文件作为源
在生产系统环境中的机器都没有连接互联网,因此都是使用本地源. 首先,需要将cdrom, 或 iso文件挂载到本地目录. 1.挂载光驱: 将cdrom 放入光驱. $ mkdir /media/cdr ...
- LINUX signal 信号
body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...
- Java三大特性(封装,继承,多态)
Java中有三大特性,分别是封装继承多态,其理念十分抽象,并且是层层深入式的. 一.封装 概念:封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别:将抽象得到的数据 ...
- npm http-server Dockerfile alpine 微容器,袖珍体积,解决时区问题
前端写得少,但是前端技术的思想也是非常有学习的价值,用VUE写了几个手机form页面,体验了一番spa,用docker部署也是非常简单 直接docker pull node 676M体积.不能忍. ...
- nodejs爬虫初试---superagent和cheerio
前言 早就听过爬虫,这几天开始学习nodejs,写了个爬虫 demo ,爬取 博客园首页的文章标题.用户名.阅读数.推荐数和用户头像,现做个小总结. 使用到这几个点: 1.node的核心模块-- 文件 ...
- python产生随机值-random模块
import random产生随机值的模块random.random() #获取一个随机的浮点值;help(random.random) #查看随机范围:0-1;random.uniform(1,10 ...
- 我的Java设计模式-策略模式
今天给大家说说田忌赛马的故事.如有雷同,纯属巧合!话说在战国时期,群雄割据,硝烟四起,茶余饭后还是少不了娱乐活动的,其中赛马是最火爆的.一天,孙膑看到田忌像个死鸡似的就知道肯定赛马又输给了齐威王,立马 ...
- 3_使用指针对象(Using Object Pointer)
类的成员函数有两种调用方式,一种是由对象调用,另一种是由对象指针调用.其中,对象调用的方式为objectName.memberFunctionName(parameters),而对象指针调用的方式为o ...