Chrome扩展程序(插件),用你开发的脚本在浏览器上随心所欲

news2024/11/28 2:31:44

Chrome扩展程序(插件),用你开发的脚本在浏览器上随心所欲

  • Chrome插件的文件结构
  • Hello_World编写
  • 利用JavaScript实现Hello Everything
  • 灵活运用浏览器的存储storage
  • options_Page基本用法
  • 电脑发通知 - Notifications的应用
  • 普通界面右键菜单 - contextMenus
  • 为插件添加徽章 - badge
  • 编写针对特定页面的插件 - pageAction
  • 向页面注入代码 - content_script
  • 补充

Google Chrome扩展程序是用来向Google Chrome添加或修改功能的浏览器扩展程序。这些扩展程序使用HTML、JavaScript和CSS语言编写而成。Google Chrome扩展程序可在Chrome网上应用店下载(其前身为Google Chrome扩展程序中心。),截止于2010年2月,已发布了超过2200个扩展程序。所有使用Google账户的用户均可在开发者提交扩展程序并审核通过后安装。

简单来说,Chrome插件是为Chrome浏览器添加功能的小程序。chrome插件可以获取网页内容并操作网页内容,如爬取网页数据(爬虫)、自动点击(定时点击或刷新)、修改网页内容(如更改网页文字或图片)等

Chrome插件的文件结构

在开始正式开放前,我们得先清楚Chrome插件的文件结构,通常一个Chrome插件由以下几个部分组成:

  • manifest.json:必须,是插件的配置文件,包含插件的名称、版本号、图标、权限等信息。
  • *.html:用于向用户展示信息并与用户交互的界面,如插件的设置界面等。
  • js/*.js:用于实现插件的逻辑功能,并不要求必须放在js文件夹下。
  • img/*.png:插件需要的图片,如插件图标等,文件类型不必是png,文件夹必须。
  • css/*.css:插件中用到的css,如对网页样式进行修改时用到的css文件。文件夹非必须。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5SxROMK2-1673870350689)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3649c7ac-9b25-4133-a090-f18efe16b067/Untitled.png)]

Hello_World编写

我们先尝试一些扩展程序的基本运用,编写Hello_World程序,导入扩展程序后点击运行即弹出“你好”。

  1. 我们用vscode打开创建好的Chrome插件架构的文件夹,先编辑manifest.json配置文件,如下:

    {
        "manifest_version": 3,              // manifest版本号
        "name": "helloWorld",               // 插件名
        "version": "1.0",                   // 插件版本
        "description": "hello world 插件",  // 插件描述
        "icons": {                          // 插件图标,Chrome给我们提供了3种大小图标(128*128、48*48、16*16),只要你提供的图片的大小大于这3种即可 
            "128": "img/test.png",
            "48": "img/test.png",
            "16": "img/test.png"
        },
        "browser_action": {                 // 在浏览器中执行时
            "default_icon": "img/test.png", // 默认图标
            "default_popup": "popup.html"   // 点击图标时弹出界面
        }
    }
    
  2. 我们开始编写popup.html,即运行插件时弹出的界面,如下:

    <html>
    
    <head>
        <title>hello world</title>
        <meta charset="utf-8" />
    </head>
    
    <body style="width: 200px;height: 200px;">
        <h1 id="message">你好</h1>
    </body>
    
    </html>
    
  3. 将整个文件夹拖拽至Chrome扩展程序中安装,如下:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fvRhQ6EK-1673870350691)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/538af360-0cfa-4866-8ec2-68e4ebcbf93b/Untitled.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kZIkiGz4-1673870350691)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/b17afb69-b026-4575-ae48-b98e45720f45/Untitled.png)]

  4. 你可以在扩展程序中找到它,并双击运行它

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6CD16aT3-1673870350692)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/a7ab7797-09c8-4648-9d58-c9a76fdf0334/Untitled.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3uZSl83I-1673870350693)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/830b360c-6fdc-4cb6-8098-d9ee4932bd65/Untitled.png)]

利用JavaScript实现Hello Everything

接下来我们尝试在插件中使用JavaScript,在popup.html中添加input标签,使界面显示内容随着input中输入的内容而改变。

  1. 在popup.html中引入js,并添加input标签

    为了图方便,我们同时还引入jquery-3.6.3.min.js,如下:

在这里插入图片描述

  1. 编写popup.js实现功能

    $(function() {
        $('#input1').keyup(function() {
            $('#message').text('你好,' + $('#input1').val());
        })
    })
    

重新部署,效果如下:

在这里插入图片描述

灵活运用浏览器的存储storage

接下来我们来尝试一下利用浏览器的存储storage实现一个浏览器缓存金额的累加写入和读取。

  1. 首先我们要在manifest.json中新增配置permissions(添加至manifest.json最后即可),如下:

    {
    	......
    	"permissions":[
    	    "storage"             // 允许缓存
    	]
    }
    
  2. 修改html代码,如下:

    <html>
        <head>
            <title>hello world</title>
            <meta charset="utf-8"/>
            
            <script src="js/jquery-3.6.3.min.js"></script>
            <script src="js/popup.js"></script>
        </head>
        <body style="width: 400px;height:400px;">
            <h2>总金额:<span id="total"></span></h2>
            <h2>本次使用:<input type="text" id="amount"/></h2>
            <input type="submit" id="add" value="添加"/>
        </body>
    </html>
    
  3. 修改popup.js,实现从浏览器中获取存储金额等效果,如下:

    $(function(){
        chrome.storage.sync.get('total',function(budget){
            $('#total').text(budget.total);
        });
        $('#add').click(function(){
            // 1.从浏览器中获取存储的金额
            chrome.storage.sync.get('total',function(budget){
                var totalAmount = 0;
                if(budget.total){
                    totalAmount = parseFloat(budget.total);
                }
                // 2.将本次金额加到总金额并存储
                var amount = $('#amount').val();
                if(amount){
                    totalAmount += parseFloat(amount);
                    chrome.storage.sync.set({'total':totalAmount});
                }
                // 3.更新显示ui
                $('#total').text(totalAmount);
                $('#amount').val('');
            }) 
        })
    })
    

options_Page基本用法

options_page主要用于一些参数的设置,以谷歌翻译扩展举例如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vvlSAb5W-1673870350700)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/db28ce9e-2050-4b74-b3a5-dba5037de840/Untitled.png)]

如何配置呢?简单如下:

  1. 在manifest.json中配置options_page界面,如下:

    {
    	......
    	"options_page": "options.html"
    }
    
  2. 编写options配置的option.html界面即可

电脑发通知 - Notifications的应用

应用Notifications,当达到通知条件时,会在电脑右下角弹框提醒。Notifications的配置也比较简单,在manifest.json中添加如下代码:

{
	......
	"permissions":[
	    "notifications"             // 允许通知
	]
}

在这里插入图片描述

普通界面右键菜单 - contextMenus

有时候我们想在任意界面上右键直接进行相关插件操作,而不是每次都要点击插件运行,这时候我们可以将插件相关功能直接放界面右键菜单中,如下:

在这里插入图片描述

要想实现这个效果也不难,实现步骤如下:

  1. 开启界面右键菜单权限,并在manifest.json中配置插件后台声明,如下:

    {
    	......
    	"background":{
    		"scripts": ["js/evenPage.js"], // 后台运行的js代码
    		"persistent": false            // 是后台一致运行(true)还是事件(右键)触发(false)
    	},
    	"permissions":[
    		......
    		"contextMenus"                 // 运行上下文菜单(右键菜单)
    	],
    	......
    }
    
  2. 编写后台运行的js代码,主要两步

    1. 创建contextMenus
    2. 为contextMenus添加点击事件的监听

    如下参考:

    // 1.创建contextMenus
    var contextMenu = {
        id: "addAmount",
        title: "添加消费",
        // contexts:page,video....
        contexts: ["selection"]
    }
    chrome.contextMenus.create(contextMenu);
    // 2.为contextMenus添加点击事件的监听
    chrome.contextMenus.onClicked.addListener(function(clickData){
        // clickData.menuItemId:被点击的菜单选项卡的id
        // clickData.selectionText:选中的内容
        if(clickData.menuItemId == "addAmount" && clickData.selectionText){
            // 执行任务
    				......
        }
    });
    

为插件添加徽章 - badge

什么是为插件添加徽章?效果如下:

在这个插件的右下角有个数字显示,这个就是badge。badge通常用于显示一些数量等等

在这里插入图片描述

如何设置呢,同样简单,在后台运行的js中添加上如下代码即可:

chrome.storage.onChanged.addListener(function(changes,storageName){
    // changes.total.newValue:总金额变化后的值
    
    // 设置徽章文本
    chrome.browserAction.setBadgeText({"text":changes.total.newValue.toString()});
    // 设置徽章背景颜色
    chrome.browserAction.setBadgeBackgroundColor({"color":[0,255,0,255]});
});

编写针对特定页面的插件 - pageAction

我们想要将插件只允许在特定页面,其他界面都不允许运行的话可以进行如下操作:

  1. 在manifest.json中配置tab,如下:

    {
    	...
    	"permissions":[
          "tabs"         // 允许运行的tab页面
      ]
    	...
    }
    
  2. 后台运行的js中配置pageAction,如下:

    chrome.tabs.query({currentWindow:true,url:"https://www.taobao.com/"},function(tabs){
       chrome.pageAction.show(tabs[0].id); 
    })
    

向页面注入代码 - content_script

接下来我们来介绍一下向指定页面注入代码,只需要在manifest.json中进行如下配置即可:

{
	...
	"content_scripts":[
		"matches": ["匹配的网站"],
		"js": ["注入的js代码"]
	],
	...
}

补充

平常我们的Chrome插件都是安装在哪里呢?如下:

Chrome 技巧篇-已安装的crx插件源码查看,插件安装位置查看方法

Python脚本和JavaScript脚本对比如何呢?如下:

更多详细操作可前往官方文档学习:Chrome 扩展开发文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/166718.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android 9.0系统源码_SystemUI(八)PhoneWindow更新状态栏和导航栏背景颜色的流程解析

前言 状态栏与导航栏属于SystemUi的管理范畴&#xff0c;虽然界面的UI会受到SystemUi的影响&#xff0c;但是&#xff0c;APP并没有直接绘制SystemUI的权限与必要。APP端之所以能够更改状态栏的颜色、导航栏的颜色&#xff0c;其实还是操作自己的View更改UI。可以这么理解&…

【Linux】探索缓冲区的概念 | Git 三板斧 | 实现简易进度条

爆笑教程&#xff0c;只送有缘人 &#x1f449; 《看表情包学Linux》 &#x1f4ad; 写在前面&#xff1a;本章我们先对缓冲区的概念进行一个详细的探究&#xff0c;之后会带着大家一步步去编写一个简陋的 "进度条" 小程序&#xff0c;过程还是挺有意思的&#xff0c…

EMQX 在 Kubernetes 中如何进行优雅升级

背景 为了降低 EMQX 在 Kubernetes 上的部署、运维成本&#xff0c;我们将一些日常运维能力进行总结、抽象并整合到代码中&#xff0c;以 EMQX Kubernetes Operator 的方式帮助用户实现 EMQX 的自动化部署和运维。 此前&#xff0c;EMQX Kubernetes Operator v1beta1、v1beta…

React--》如何在React中创建TypeScript项目并使用?

目录 React中创建TS项目 TS目录结构 React函数组件类型 React类组件类型 如果你已经掌握了TS中基础类型、高级类型的使用&#xff0c;还想在前端项目中更深一层的使用TS&#xff0c;还需要掌握React、Vue、Angular等框架和框架提供的API&#xff0c;懂得如何在框架中使用TS…

【ROS】—— 机器人导航(仿真)—导航实现(十八)[重要][重要][重要]

文章目录前言准备条件1. 导航实现01_SLAM建图1.1 gmapping简介1.2 gmapping节点说明1.3 gmapping使用1.3.1 编写gmapping节点相关launch文件1.3.2 执行2. 导航实现02_地图服务2.1 map_server简介2.2 map_server使用之地图保存节点(map_saver)2.2.1 map_saver节点说明2.2.2 地图…

你是真的“C”——函数递归详解汉诺塔+青蛙跳台阶

函数递归详解汉诺塔青蛙跳台阶问题&#x1f60e;前言&#x1f64c;函数递归之汉诺塔详解分析&#x1f64c;汉诺塔问题的简介&#x1f60a;汉诺塔的移动图解&#x1f60a;汉诺塔具体的移动过程展示&#x1f60a;汉诺塔的难处所在&#xff1a;&#x1f60a;函数递归之青蛙跳台阶详…

从头安装gdal库(Linux环境下的Python版)

目录前言GDAL安装SWIG安装proj 安装sqlite安装pkg-config 安装其他报错No package libtiff-4 foundPackage liblzma, required by libtiff-4, not foundPackage libjpeg, required by libtiff-4, not foundPackage zlib, required by libtiff-4, not foundchecking for curl-co…

Windows下IIS部署网站流程

IIS Internet information service 是一个web服务器 1. IIS用于windows系统 2.apache用于Linux系统&#xff0c;JAVA的web服务器 3.Nginx用于Linux&#xff0c;负责负载均衡&#xff0c;反向代理 安装完IIS之后&#xff0c;去更改DNS的指向。 DNS指向&#xff1a;IP 和 域名 的…

Dopamine-PEG-N3,多巴胺聚乙二醇叠氮 科研试剂用于点击化学

中文&#xff1a;多巴胺-聚乙二醇-叠氮 英文&#xff1a;Dopamine-PEG-N3&#xff0c;DOPA-PEG-azide 存储条件&#xff1a;-20C&#xff0c;避光&#xff0c;避湿 用 途&#xff1a;仅供科研实验使用&#xff0c;不用于诊治 外观: 固体或粘性液体&#xff0c;取决于分子量 …

3D游戏引擎系统源码C++本科毕业设计,C++ 3D引擎源码,渲染系统使用的OpenGL 及 OpenGL ES

Effective 3D Engine 渲染系统使用的OpenGL 及 OpenGL ES&#xff0c;Windows上OpenGL ES使用AMD的ES模拟器。 环境部署 完整代码下载地址&#xff1a;3D游戏引擎系统源码C本科毕业设计 Win32环境配置 编辑器 将proj_win32/RenderSystem/gles_renderSystem/GLES/dll 中的d…

【web】微信小程序笔记小结(模板与配置)

来源&#xff1a;黑马程序员前端微信小程序开发教程 目录 I. WXML 模板语法 ① 数据绑定 ※※ 基本原则 ※※ 在 data 中定义数据 ※※ 在 WXML 中使用数据 ※※※※ Mustache 语法的格式 ※※※※ Mustache 主要应用场景 1&#xff09;动态绑定内容 2&#xff09;动…

测试篇(二): 如何合理的创建bug、bug的级别、bug的生命周期、跟开发产生争执怎么办

目录一、如何合理的创建bug二、bug的等级三、bug的生命周期四、和开发产生争执怎么办一、如何合理的创建bug 创建Bug的目的就是为了能够让其他人可以尝试复现 一个合格的bug应该包含以下一个要素&#xff1a; 发现问题的版本 例如Web程序对应的浏览器版本&#xff0c;或某个应…

AutoLISP 演练(一)

一、输入左下角点、矩形宽、矩形高后&#xff0c;自动的将图形依所给的条件画出二、变量约定本程序所需的AutoLisp功能函数&#xff08;setq 变量名 变量值&#xff09; ⬅ 设定变量值&#xff08;getpoint [基点] [提示]&#xff09; ⬅ 请求参考基点输入一个点坐标(getreal […

PyTorch中contiguous、view、Sequential、permute函数的用法

在pytorch中&#xff0c;tensor的实际数据以一维数组&#xff08;storage&#xff09;的形式存储于某个连续的内存中&#xff0c;以“行优先”进行存储。 1. tensor的连续性 tensor连续&#xff08;contiguous&#xff09;是指tensor的storage元素排列顺序与其按行优先时的元素…

【前端】列表页点进某个详情页,详情页可按顺序跳转到上一条/下一条的实现思路(2种)

需求概述 列表页展示列表&#xff0c;点击某个列表可以跳转到对应的详情页&#xff0c;点击上一页下一页可以按列表顺序跳转到对应详情页。比如点击列表2进入到详情2&#xff0c;我点上一页可以跳转到详情1&#xff0c;点击下一页可以跳转到详情3。难点&#xff1a;详情页如何…

Http客户端 Feign 的使用 (黑马springcloud笔记)

Feign基本使用 目录Feign基本使用一、Feign代替RestTemplate二、自定义配置三、Feign使用优化1. 底层优化2. 日志优化四、最佳实践方式一&#xff1a;继承方式二&#xff1a;抽取一、Feign代替RestTemplate 步骤&#xff1a; 引入依赖 <dependency><groupId>org.s…

UITableView内输入框(UITextView)换行

业务描述&#xff1a; UITableView内存在一个Cell&#xff0c;该Cell内有一输入框可以输入文字&#xff0c;超出输入框宽度则换行展示&#xff0c;即该Cell高度要增加 如图&#xff1a; 解决方法&#xff1a; 思路&#xff1a; 1:取到最大输入框宽度 2:计算当前文字宽度与最…

QT自定义控件工程结构框架

目录前言一、cutewidgets是什么&#xff1f;二、工程结构三、框架的工程配置1 cutewidgets.pro2 cutewidgets.pri2.1 cutewidgetsconfig.pri2.2 cutewidgetsfunctions.pri2.3 cutewidgetsbuild.pri四、源码1 src1.1 src.pro1.2 cutewidgets_global.h1.3 testedit1.4 扩展2 exam…

互联网中断检测技术窥览与讨论

前言&#xff1a; 如其他人造系统一样&#xff0c;互联网的运行也会出现异常甚至中断。仅在2022年就发生了多起影响重大的互联网中断事件&#xff1a;1月15日汤加火山喷发三个小时后&#xff0c;全国断网&#xff0c;和外界的所有电话与网络联系都无法接通&#xff1b;3月28日…

系统分析师案例必备知识点汇总---2023系列文章二

需求获取 1、需求获取的技术&#xff1a; 用户访谈 优点&#xff1a;具有良好的灵活性&#xff0c;有较宽广的应用范围。 缺点是&#xff1a;用户忙&#xff0c;信息量大&#xff0c;记录困难&#xff0c;需要沟通技巧。 问卷调查 优点&#xff1a;短时间内收集数据。 缺点…