公司需要开发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 插件(扩展)开发——基础篇的更多相关文章

  1. Chrome插件(扩展)开发全攻略

    [干货]Chrome插件(扩展)开发全攻略:https://www.cnblogs.com/liuxianan/p/chrome-plugin-develop.html

  2. 【干货】Chrome插件(扩展)开发全攻略(不点进来看看你肯定后悔)

    写在前面 我花了将近一个多月的时间断断续续写下这篇博文,并精心写下完整demo,写博客的辛苦大家懂的,所以转载务必保留出处.本文所有涉及到的大部分代码均在这个demo里面:https://github ...

  3. 【干货】Chrome插件(扩展)开发全攻略

    写在前面 我花了将近一个多月的时间断断续续写下这篇博文,并精心写下完整demo,写博客的辛苦大家懂的,所以转载务必保留出处.本文所有涉及到的大部分代码均在这个demo里面:https://github ...

  4. 【干货】Chrome插件(扩展)开发全攻略(转)

    写在前面 我花了将近一个多月的时间断断续续写下这篇博文,并精心写下完整demo,写博客的辛苦大家懂的,所以转载务必保留出处.本文所有涉及到的大部分代码均在这个demo里面:https://github ...

  5. 开发chrome插件(扩展)

    官方文档 https://developer.chrome.com/extensions/getstarted.html [干货]Chrome插件(扩展)开发全攻略 http://blog.haoji ...

  6. Chrome插件(扩展)

    [干货]Chrome插件(扩展)开发全攻略   写在前面 我花了将近一个多月的时间断断续续写下这篇博文,并精心写下完整demo,写博客的辛苦大家懂的,所以转载务必保留出处.本文所有涉及到的大部分代码均 ...

  7. Chrome浏览器扩展开发系列之十四:本地消息机制Native messagin

    Chrome浏览器扩展开发系列之十四:本地消息机制Native messaging 2016-11-24 09:36 114人阅读 评论(0) 收藏 举报  分类: PPAPI(27)  通过将浏览器 ...

  8. Chrome浏览器扩展开发系列之十四

    Chrome浏览器扩展开发系列之十四:本地消息机制Native messaging 时间:2015-10-08 16:17:59      阅读:1361      评论:0      收藏:0    ...

  9. Android应用开发基础篇(1)-----Button

    Android应用开发基础篇(1)-----Button   一.概述        Button,顾名思义就是按钮的意思,它主要的功能是响应用户按下按钮时的动作. 二.应用      新建一个工程, ...

随机推荐

  1. Linux 6.4 设置yum 为centOS源

    一. 删除Redhat 自带的yum // root 用户执行 rpm -aq|grep yum|xargs rpm -e --nodeps 二 .下载CentOS 的 yum 安装文件 wget h ...

  2. Java经典编程题50道之二十四

    有5个人坐在一起,问第5个人多少岁,他说比第4个人大2岁.问第4个人岁数,他说比第3个人大2岁. 问第三个人,他说比第2人大两岁.问第2个人, 说比第一个人大两岁.最后问第一个人,他说是10岁. 请问 ...

  3. nxlog4go 按天或按文件大小分割日志

    Building a new rotate file writer: rfw := l4g.NewRotateFileWriter("_rfw.log").SetMaxSize(1 ...

  4. XP环境下的网络证书问题

    项目过程中,由于是收银系统需要从服务器获取支付二维码,会产生SSL连接的问题,在win7.win10上都没有问题,放到WIN XP上出现了The underlying connection was c ...

  5. 集成 solr6.5.1到 tomcat7(8) 中 (解决java.lang.NoSuchMethodError问题)

    ♣下载solr安装包 ♣安装solr ♣solr应用部署到tomcat下 ♣配置web.xml ♣在tomcat7启动 ♣改为在tomcat8启动 ♣在自带的Jetty里启动 ♣建立第一个Core 安 ...

  6. network programming-简单的TCP客户服务器编程

    简单的TCP程序客户端流程:创建套接字(套接字用IP地址:端口号)表示)socket()->请求连接connect()->交换数据 send()/recv()->关闭连接 close ...

  7. 在SpringBoot中使用FluentValidator验证插件

    前言 在我们编写项目的时候,在controller中往往离不开对一些数据的校验.这里并不是说对于这些数据业务上面的校验,而是对这些数据进行空校验或者是长度校验等. 有些时候校验可以省略,根据业务的需要 ...

  8. B树、B-树、B+树、B*树【转】,mysql索引

    B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right): 2.所有结点存储一个关键字: 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树: 如: B ...

  9. hive: join 遇到问题

    在表连接时遇到一个问题: insert overwrite table BF_EVT_CRD_CRT_TRAD2 select BF_EVT_CRD_CRT_TRAD.*, jjkdjk.CUST_N ...

  10. SQL Server 批量插入

    使用场景 在项目中,涉及到数据库表变更时,可能会需要将一个或多个表中的数据迁移到另一个表中. 这时用sql去执行会很方便! sql语句 //SQL批量插入 create table #ttableNa ...