一个简单的chrome拓展程序开发

2023-11-15

最近突然觉得有些常用的功能可以写成浏览器插件,就不用把代码放到console控制台运行了。只要点击插件图标就可以自动运行。会方便很多。就去查了下chrome插件开发教程。本质上讲,chrome插件就是以一些特殊的方式运行一些特定的html,css,JavaScript代码,前端同学们学起来还是很容易的。

比较好的中文的参考资料:
1.360翻译的文档:http://open.chrome.360.cn/ext...
2.Chrome扩展及应用开发:http://www.ituring.com.cn/min...

我们做一个简单的插件:实现点击插件图标可以给页面上所有的a标签加上一个target="_blank",让点所有链接都在新页面打开。
我们开发的应用这样使用:
图片描述

1.建立一个文件夹。a chrome plugin。
2.新建配置文件 manifest.json。前端同学们对于这样的配置文件一定不陌生。
里同包含了版本号,插件名称,默认页面,content_scripts,permissions等基本信息。
这个文件能将我们插件中的的js,css,JavaScript文件组织起来。
具体每个参数的含义见文档:http://open.chrome.360.cn/ext...
代码:

{
    "manifest_version": 2,
    "name": "A",
    "version": "1.0",
    "description": "新标签打开链接",
    "browser_action": {
        "default_popup": "popup.html"
    },
    "content_scripts":[
        {
            "matches": ["http://*/*","https://*/*"],
            "js": ["back.js"],
            "run_at":"document_end"
        }
    ],
    "permissions": [
        "tabs"
    ]
}

3.建立文件。popup.html。
对应配置文件中的 "default_popup": "popup.html"。
图片描述
点图标的时候我们会加载运行这个html,运行这个html引入的js。
这是一个普通的html页面。里面可以写css。也可以加载JavaScript文件。也可以给里面的节点添加事件什么的。
不过这个文件以及加载的js无法访问当前我们打开的标签页中的dom节点。
代码:

<html>
<head>
    <meta charset="utf-8">
</head>
<body>
    这是popup.html里面。
</body>
</html>
<script src="popup.js"></script>

这里只用来加载一个js。

4.popup.js。 popup.html引入的js。这里我们用户它的做的事是向content_scripts中发送一个消息。相当于发一个命令。告诉content script,去办事吧。content_scripts的内容在后面,看完再回过来看一次这里。

    chrome.tabs.getSelected(null, function(tab) {
        chrome.tabs.sendRequest(tab.id, {greeting: "hello"}, function(response) {
            // console.log(response.farewell);
        });
    });

chrome.tabs.getSelected()这个函数能获取到当前标签的信息对象并传递给回调函数。 
获取到tabId就是tab.id。可以自己console.log(tab)出来看一下。文章后面有对应调试控制台的打开方式。tab相关的接口可以查看:http://open.chrome.360.cn/ext... 很多接口都要用到这个参数:tabId ( integer ),其实就是用这个接口拿到tabId。

chrome.tabs.sendRequest()这个函数是向某个标签的content_script中发送一个消息。也需要tabId这个参数。chrome插件之间的通信接口可查看 :http://open.chrome.360.cn/ext...

5.back.js。也是我们这个插件中的content script。
这个文件是我们插入到当前标签页中运行的代码。它可以访问标签页面中的dom节点。
我们这里用它来是监听消息,消息来了就运行设置标签的函数。操作标签页中的dom节点。

对应配置文件中content_scripts下的back.js。
这个参数中的内容会被加载到当前打开的网页中,可以访问当前标签页的节点。
所以,我们对页面的操作往往会写在这个脚本里。有需要的话甚至可以加载个jQuery到里面。
但是这里的JavaScript与网页上原本的JavaScript不是一个环境下运行。具体区别可以自己去看开发文档。http://open.chrome.360.cn/ext...
代码:

function setA(){
    var aDoms = document.getElementsByTagName('a');
    var len = aDoms.length;
    for (var i = 0; i < len; i++) {
        aDoms[i].setAttribute("target","_blank")
    }
}
chrome.extension.onRequest.addListener(
    function(request, sender, sendResponse) {
        if (request.greeting == "hello"){
            setA();
            // sendResponse({farewell: "goodbye"});
        }else{
              // sendResponse({});
          }
      }
      );

可能比较要注意的一点是popup.html与content_script之间的通信。
popup.html向标签页中的content_script发送消息。
content_script接收到消息,执行操作。

6.调试方式:
popup.html加载的js调试。
右键点击插件图标,选择审查弹出内容。(或者在弹出框里右键点击检查。)会弹出一个控制台。
点source可以看到我们的html和js资源。
图片描述

content_script的调试:
打开页面控制台,点sources,然后点Contents scripts,可以看到浏览器插件会作用到页面的代码。
图片描述

注意每次修改了代码要重新加载插件。

这样我们就完成了一个简单的chrome插件。

github:https://github.com/liusaint/J...
本文同步发表在我的csdn博客上:http://blog.csdn.net/liusaint...

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一个简单的chrome拓展程序开发 的相关文章

  • socket.io 的良好初学者教程? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 为什么 iife 在一个简单的例子中不起作用?

    我不明白为什么函数表达式调用不起作用并抛出错误 你能给我解释一下吗 var a function x alert x function a 1 谢谢大家 任务比我想象的要容易得多 这是因为 JS 将 IIFE 解析为函数的参数调用 这样做时
  • 如何在react-bootstrap中禁用表单提交的

    在下面的代码片段中 我有许多文本类型的输入表单 如果用户点击 我似乎会得到相同的合成事件 就像他们按下提交按钮一样 我想忽略作为表单提交 只允许一个人按下 提交 按钮 我删除了一些表单组以减少示例 在所有情况下 按钮或 ENTER 键 e
  • 如何使用javascript将大图像转换为十六进制?

    如果我尝试将图像转换为十六进制 无论我使用哪个函数 我都会收到此错误消息 该图像的大小为 7 MB 19812 毫秒 清理 1401 2 1455 0 gt 1401 2 1455 0 MB 9 9 0 ms 自上次 GC 以来 8 3 m
  • 如何针对 Node.js 中发生的每个错误发送电子邮件?

    假设我的 node js 应用程序正在运行 如果出现错误 我的意思是所有错误 不仅仅是网络错误 如果出现错误 则很重要 我如何调用函数向我发送电子邮件 基本上 在我希望它写入 err out 之前 我希望向我发送一封电子邮件 我正在使用no
  • 在打字稿中导入 json

    我是 typescript 的新手 在我的项目中 我们使用 typescript2 在我的要求之一中 我需要导入 json 文件 所以我创建了 d ts 文件如下 test d ts declare module json const va
  • 隐藏 Div 的父级

    我只是想隐藏父divcomments section div class content content green div div div 我试过这个 document getElementById comments section pa
  • 设置 cookie 时中断 JavaScript 执行

    当设置 cookie 时 是否可以始终中断浏览器开发人员工具中的 javascript 执行 无需显式设置 JS 断点 document cookie 在 html head 块的开头添加此代码片段效果很好
  • 如何制作没有 ng-repeat 的模板并使用 Angular-drag-and-drop-lists 将数据传递到 $scope?

    我想用角度拖放列表 https github com marceljuenemann angular drag and drop lists使用我自己的网格模板到所见即所得编辑器 如何构建我自己的 HTML 模板而不需要ng repeat因
  • window.location 和 location.href 之间的区别

    我对之间的区别感到困惑window location and location href 两者似乎都以相同的方式行事 有什么不同 window location是一个对象 它保存有关当前文档位置的所有信息 主机 href 端口 协议等 lo
  • 为什么我们在打字稿中使用 HTMLInputElement ?

    我们为什么使用 document getElementById ipv as HTMLInputElement value 代替 document getElementById ipv value 功能getElementById返回具有类
  • 有没有办法在 onclick 触发时禁用 iPad/iPhone 上的闪烁/闪烁?

    所以我有一个有 onclick 事件的区域 在常规浏览器上单击时 它不会显示任何视觉变化 但在 iPad iPhone 上单击时 它会闪烁 闪烁 有什么办法可以阻止它在 iPad iPhone 上执行此操作吗 这是一个与我正在做的类似的示例
  • 页面上使用 HTML Editor Extender 进行回发会导致 IE11 中出现 JavaScript 错误

    我已将 HTML 编辑器扩展程序添加到我正在处理的页面中 现在每当我在页面上发回帖子时 都会收到以下 Javascript 错误 JavaScript 运行时错误 参数无效 之后什么也没有发生 这在 IE10 或更低版本以及我所知道的所有其
  • Firebase 函数 onWrite 未被调用

    我正在尝试使用 Firebase 函数实现一个触发器 该触发器会复制数据库中的一些数据 我想观看所有添加的内容votes user vote 结构为 我尝试的代码是 const functions require firebase func
  • 在 Javascript 中连接空数组

    我正在浏览一些代码 我想知道这有什么用处 grid push concat row 根据我的理解 它等同于 grid push row 为什么要大惊小怪 连接 你想使用 concat当您需要展平数组并且没有由其他数组组成的数组时 例如 va
  • 用于交互式图形绘制的轻量级 JavaScript 库? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有兴趣了解用于绘制交互式图表的最轻量级 javascript 库 我掌握的数据主要是与海洋研究相关的科学数据 我知道一些 jquery
  • 在 CKEditor 中设置字体大小和字体系列

    我正在使用 ckeditor 我想问一下这个插件如何设置font family和font size 我尝试过使用 CKEDITOR config font defaultLabel Arial CKEDITOR config fontSiz
  • 使用 MongoDB 和 Nodejs 插入和查询日期

    我需要一些帮助在 mongodb 和 nodejs 中按日期查找记录 我将日期添加到抓取脚本中的 json 对象 如下所示 jsonObj last updated new Date 该对象被插入到 mongodb 中 我可以看到如下 la
  • Jquery - 选择选项后如何获取选项的特定数据类型?

    我将直接跳到标记 然后解释我想要做什么 HTML 选择选项
  • 如何使用asm.js进行测试和开发?

    最近我读到asm js规范 看起来很酷 但是是否有任何环境 工具来开发和测试这个工具 这还只是处于规范阶段吗 您可以尝试使用 emscripten 和 ASM JS 1 并从侧分支在 firefox 构建中运行它 有关 asm js 的链接

随机推荐

  • DVCon US 2022论文集合

    2022年DVCon US Paper共55篇 已开放下载论文全集 在此整理各篇论文的摘要和下载链接 方便大家获取和交流 也可后台私信获取 1 A Comparative Study of CHISEL and SystemVerilog
  • 华为架构师8年经验谈:从单体架构到微服务的服务化演进之路

    华为架构师8年经验谈 从单体架构到微服务的服务化演进之路 目录技术文章 2016年6月28日 转自 http www 58maisui com 2016 06 28 a 327 ref myread 本次分享的大纲如下 传统应用开发面临的挑
  • 系统呼叫服务器,一种基于服务器的后台呼叫方式及系统技术方案

    技术实现步骤摘要 本专利技术涉及通讯领域 特别是涉及一种基于服务器的后台呼叫方式及系统 技术介绍 通话是人们生活中必不可少的功能 我们在拨打电话时都遇到过因对方手机关机 占线 暂时无法接通或停机而无法及时联络到对方的情况 目前的处理方式是
  • 人生清单100条

    人生清单是一个个人向往 目标和追求的集合 每个人的清单都会因其个人价值观 兴趣和优先事项而不同 以下是一个包含一些常见目标和价值的人生清单的示例 以供参考 1 学习一门新语言 2 旅行至少10个不同的国家 3 完成一次马拉松 4 创办自己的
  • python 自动复制U盘文件到电脑磁盘v202112012250

    python 自动复制U盘文件到电脑磁盘v202112012250 打包exe去黑框 pyinstaller F w D a1 py import pathlib import time import datetime import shu
  • Dynamics CRM邮箱配置 (OP版)

    Dynamics CRM邮箱配置 Dynamics CRM对邮箱有很好的支持 开通邮箱后方便用户通过邮件进行Dynamics CRM的业务处理 同时也可以作为一直消息流提醒的手段应用于审批 通知等场景 可以做一些更深入的功能拓展 本次集成以
  • MyBatis-Plus详解

    MyBatis Plus 1 简介 1 1 操作步骤 1 2 mybatis plus mapper编写规则 2 注解介绍 2 1 常用注解 2 2 mybatis plus通用Mapper接口 3 条件构造器 4 高级查询 4 1 列投影
  • 学习笔记:多重纹理

    学习笔记 多重纹理 2009 09 01 14 20 52 转载 分类 学习笔记 多重纹理 多重纹理就是在渲染一个多边形的时候可以用到多张纹理图 把多张纹理图进行一些颜色的操作 可以达到一些效果 但是多重纹理必须是在显卡支持的情况下 但是还
  • centOS 配置DNS

    修改 etc resolv conf 重启网卡或者重启电脑后 etc resolv conf会恢复到原来的状态 原因说明 CentOS redhat下面直接修改 etc resolv conf 达到临时效果 但是重启网络后会重置 重启后 根
  • c++ 结构体

    1 结构体定义 整形 长整形 字符型以及浮点型等这些数据类型指南记录单一的数据 而这些数据只能被称为基础数据类型 如果需要定义某种类型 同时包含以上几种的基本数据类型 比如一个人同时含有身高 体重以及年龄的属性 而结构体就是将这些变量类型包
  • @ApiImplicitParams这个注解的作用

    ApiImplicitParams这个注解的作用 ApiImplicitParams是一个用于描述方法参数的注解 它可以用在方法上 作用是为方法中的参数定义多个注解 并将这些注解集中到一个注解集中进行统一管理 通过 ApiImplicitP
  • 1028. 从先序遍历还原二叉树

    题目 https leetcode cn com problems recover a tree from preorder traversal 我们从二叉树的根节点 root 开始进行深度优先搜索 在遍历中的每个节点处 我们输出 D 条短
  • 机器学习--Logistic Regression(逻辑回归)---分类器

    写在之前 带着问题去学习 往往能够让我们有着一个纲领的学习方法 而不会迷失在各种概念 和公式的推导中 1 什么是逻辑回归 逻辑回归的推导 损失函数的推导分别是什么 为什么LR需要归一化或者说取log 2 LR为什么要用sigmoid函数 这
  • 深度学习中分类和回归常见损失函数归纳小结

    1 引言 在深度学习领域中 损失函数定义了模型的预测与目标值之间的距离 因此我们必须正确地选择它 只有这样所有的参数才会根据其值进行更新 损失函数的选择取决于模型的设计 在这篇文章中 我们主要讨论两种常见的的任务 即回归和分类 2 回归损失
  • 蓝桥杯算法训练-印章

    这一题是10月份新加的题 网上也没啥答案 标签为dp动态规划 实际上我觉得不用动态规划也能做 毕竟python是自带了求组合数的函数 下面来看一下吧 试题 算法训练 印章 资源限制 时间限制 1 0s 内存限制 256 0MB 问题描述 共
  • mybatis逆向工程

    使用mybatis的逆向工程生成JavaBean和mapper以及映射文件只需要三个步骤 1 逆向工程maven依赖 2 编写配置文件genarator xml 3 编写主函数 启动类 一 maven依赖
  • 基于AIOT技术的智慧校园空调集中管控系统设计与实现

    毕业论文 设计 题 目 基于AIOT技术的智慧校园空调集中管控系统设计与实现 指导老师 XXXX 专业班级 电子商务2XXXX 姓 名 XXXX 学 号 20XXXXXXXXX 20XX年XX月XX日 摘要 近年来 随着物联网技术和人工智能
  • 【计算机视觉】BLIP:源代码示例demo(含源代码)

    文章目录 一 Image Captioning 二 VQA 三 Feature Extraction 四 Image Text Matching 一 Image Captioning 首先配置代码 import sys if google
  • LU分解,LDLT分解,Cholesky分解

    LU分解 如果方阵是非奇异的 即的行列式不为0 LU分解总是存在的 A LU 将系数矩阵A转变成等价的两个矩阵L和U的乘积 其中L和U分别是下三角和上三角矩阵 而且要求L的对角元素都是1 形式如下 本质上 LU分解是高斯消元的一种表达方式
  • 一个简单的chrome拓展程序开发

    最近突然觉得有些常用的功能可以写成浏览器插件 就不用把代码放到console控制台运行了 只要点击插件图标就可以自动运行 会方便很多 就去查了下chrome插件开发教程 本质上讲 chrome插件就是以一些特殊的方式运行一些特定的html