谷歌插件之一键关闭同域名页面

欢迎来到我的博客,代码的世界里,每一行都是一个故事


在这里插入图片描述

🎏:你只管努力,剩下的交给时间

🏠 :小破站

谷歌插件之一键关闭同域名页面

    • 前言
    • 项目结构
      • `mainfest.json`
      • `backgroud.js`
    • 项目实现
    • 效果展示
    • 展望

前言

在日常的网页浏览中,我们常常会打开多个相同域名的页面,特别是在进行某些重复性工作或者浏览新闻网站时,这种情况尤为常见。手动关闭这些页面既费时又费力。为了解决这个问题,我们可以开发一个简单的谷歌插件,实现一键关闭所有同域名的页面,极大地提升浏览效率。本文将带你一步一步完成这个插件的开发过程。

项目结构

创建一个新的文件夹,如close-same-domain-tabs,并在其中创建以下文件:

mainfest.json

下面是manifest.json文件中常见字段的详细讲解:

  1. manifest_version
"manifest_version": 3
  • 描述:指定清单文件的版本。目前,Chrome浏览器支持两个版本:2和3。推荐使用最新的版本3,因为它包含了安全性和性能的改进。
  1. name
"name": "Close Same Domain Tabs"
  • 描述:插件的名称,将显示在Chrome扩展管理页面和插件商店中。
  1. version
"version": "1.0"
  • 描述:插件的版本号,必须是三段式(major.minor.patch),每次更新插件时需要增加版本号。
  1. description
"description": "一键关闭所有同域名的页面"
  • 描述:插件的简短描述,向用户说明插件的用途。
  1. permissions
"permissions": ["tabs"]
  • 描述:插件运行时所需的权限。tabs权限允许插件访问和操作浏览器中的标签页。
  • 常见权限
    • "activeTab":当前活动标签的权限。
    • "storage":访问插件的本地存储。
    • "http://*/*""https://*/*":访问所有HTTP和HTTPS网址。
  1. background
"background": {"service_worker": "background.js"
}
  • 描述:定义插件的后台脚本。后台脚本在插件加载时运行,用于处理插件的核心逻辑。
  • 字段
    • service_worker:指定背景脚本文件(仅在Manifest V3中使用)。
    • scripts:指定背景脚本文件(用于Manifest V2)。
  1. action
"action": {"default_popup": "popup.html","default_icon": {"16": "icon16.png","48": "icon48.png","128": "icon128.png"}
}
  • 描述:定义插件的图标和弹出页面。
  • 字段
    • default_popup:指定点击插件图标时显示的HTML文件。
    • default_icon:指定插件图标的不同尺寸。
  1. icons
"icons": {"16": "icon16.png","48": "icon48.png","128": "icon128.png"
}
  • 描述:定义插件的图标。
  • 字段
    • 1648128:分别表示16x16、48x48和128x128像素的图标文件路径。
  1. optional_permissions
"optional_permissions": ["tabs"]
  • 描述:定义可选权限,用户可以在运行时选择授予或不授予这些权限。
  1. content_scripts
"content_scripts": [{"matches": ["<all_urls>"],"js": ["content.js"]}
]
  • 描述:定义内容脚本,注入到指定页面中。
  • 字段
    • matches:指定内容脚本匹配的URL模式。
    • js:指定注入的JavaScript文件。
  1. options_page
"options_page": "options.html"
  • 描述:指定插件的选项页面,用户可以在扩展管理页面中访问。
  1. browser_action
"browser_action": {"default_popup": "popup.html","default_icon": {"16": "icon16.png","48": "icon48.png","128": "icon128.png"}
}
  • 描述:用于定义浏览器操作(类似于action,但在Manifest V2中使用)。
  1. web_accessible_resources
"web_accessible_resources": [{"resources": ["popup.html"],"matches": ["<all_urls>"]}
]
  • 描述:定义插件中的哪些资源可以从网页中访问。
  1. content_security_policy
"content_security_policy": {"extension_pages": "script-src 'self'; object-src 'self'"
}
  • 描述:定义内容安全策略,确保插件的安全性。

通过了解这些字段及其用途,你可以更好地理解和配置manifest.json文件,从而创建功能丰富且安全的Chrome插件。

backgroud.js

在谷歌插件开发中,background.js 扮演着非常重要的角色,它主要用于处理插件的后台逻辑和事件监听。让我们详细地了解一下它在谷歌插件中的作用:

  1. 作为后台页面运行

谷歌插件中的 background.js 作为一个后台页面,始终在插件安装后运行,并且可以持续监听和处理事件,即使用户没有直接与插件的界面交互也可以执行任务。

  1. 扩展功能的初始化和处理
  • 初始化任务:通过 chrome.runtime.onInstalled.addListener 监听器,可以在插件安装时执行初始化任务,如设置默认值、注册默认设置等。

  • 事件处理:使用 chrome.action.onClicked.addListener 监听器,可以捕获用户点击插件图标的事件,并执行相应的操作。

  1. 管理和控制标签页
  • 查询标签页:通过 chrome.tabs.query 方法,可以获取当前窗口中的所有标签页,从而实现对标签页的管理和操作。

  • 关闭标签页:使用 chrome.tabs.remove 方法可以关闭指定的标签页,这在插件需要根据特定逻辑自动关闭标签页时特别有用。

  1. 监听和响应外部消息
  • 消息通信:可以通过 chrome.runtime.onMessage.addListener 监听器来接收来自其他插件页面或者内容脚本的消息,实现插件内部的通信和协调。

  • 与内容脚本的交互:通过 chrome.runtime.connectchrome.runtime.onConnect.addListener 方法,可以与内容脚本建立长连接,实现跨页面的数据传输和操作。

  1. 实现长时间运行的任务

由于 background.js 是作为一个后台页面运行的,它可以长时间保持活动状态,处理复杂的任务和逻辑,比如监控网络请求、数据持久化、周期性的任务等,这些任务通常是用户界面不可见的但对插件功能至关重要的部分。

  1. 优化资源使用

谷歌浏览器对每个插件运行的后台页面有资源使用限制,background.js 的设计需要考虑到优化资源使用,避免长时间占用过多的内存和CPU,以确保不影响用户的浏览体验。

项目实现

  • 打开chrome://extensions/

  • 点击“加载已解压的扩展程序”按钮,选择项目文件夹。

  • 插件加载后,在浏览器工具栏会出现插件的图标。

  • 点击图标,弹出窗口将出现,点击“关闭所有同域名页面”按钮,测试插件功能。

效果展示

ezgif-6-4079c7448d

展望

如有需要可以关注下方公众号回复google-close-domain获取

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

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

相关文章

13019.CUDA问题积累

文章目录 1 内存不断增长的问题1.1 主机从GPU拷贝内存1.1.1 htop 内存增长到一定阶段后&#xff0c;保持稳定 1.2 GPU拷贝到Host修改之后内存稳定无变化1.3 结论 2 主机与GPU数据拷贝方案2.1 cudaMemcpy 拷贝内存2.2 cudaMemcpyAsync 异步数据拷贝2.3 采用多线程拷贝技术2.3.1 …

群主必学!轻松Get如何解散微信群的技巧

作为一个微信群的群主&#xff0c;解散群聊可能是你需要掌握的重要技能之一。不管是因为群聊的目的已经达成&#xff0c;还是因为群成员过少或不活跃&#xff0c;了解如何解散微信群都能帮助你更好地管理你的群聊。 如何解散微信群&#xff1f;本文将为您提供一些简单易行的技…

代码随想录算法训练营第五十天| 739. 每日温度、496.下一个更大元素 I、503.下一个更大元素II

739. 每日温度 题目链接&#xff1a; 739. 每日温度 文档讲解&#xff1a;代码随想录 状态&#xff1a;不会 思路&#xff1a; 这道题需要找到下一个更大元素。 使用栈来存储未找到更高温度的下标&#xff0c;那么栈中的下标对应的温度从栈底到栈顶是递减的。这意味着&#xff…

改变Ubuntu的Tab没有缩进4格(Makefile)

1.vim里的Tab 用vi指令打开这个文件&#xff0c;没有的话就新创建一个 vi ~/.vimrc在打开的文件中输入以下两行 1 set tabstop42 set shiftwidth4 ~ Esc &#xff1a; x&#xff0c;保存并退出即可 资料来源&#xff1a; 2024年5月21日-vi/vim …

Linux Ubuntu MySQL环境安装

1. 更新软件源 首先&#xff0c;确保你的Ubuntu系统已经更新了软件源列表&#xff0c;以便能够下载到最新的软件包。打开终端并输入以下命令&#xff1a; sudo apt update 2. 安装MySQL服务器 打开终端并输入以下命令来安装MySQL服务器 sudo apt install mysql-server 在…

一个便捷的web截图库~【送源码】

随着时间的发展&#xff0c;前端开发的范围越来越广&#xff0c;能够实现的功能也越来越多&#xff0c;要实现的功能也五花八门&#xff0c;今天就给大家介绍一个web截图库,让前端也能实现截图功能—— js-web-screen-shot js-web-screen-shot js-web-screen-shot 是一个基于 …

语言模型演进:从NLP到LLM的跨越之旅

在人工智能的浩瀚宇宙中&#xff0c;自然语言处理&#xff08;NLP&#xff09;一直是一个充满挑战和机遇的领域。随着技术的发展&#xff0c;我们见证了从传统规则到统计机器学习&#xff0c;再到深度学习和预训练模型的演进。如今&#xff0c;我们站在了大型语言模型&#xff…

【接口设计】如何设计统一 RESTful 风格的数据接口

如何设计统一 RESTful 风格的数据接口 1.版本控制1.1 通过 URL1.2 通过自定义请求头1.3 通过 Accept 标头 2.过滤信息3.确定 HTTP 的方法4.确定 HTTP 的返回状态5.定义统一返回的格式 近年来&#xff0c;随着移动互联网的发展&#xff0c;各种类型的客户端层出不穷。如果不统一…

国漫推荐11

1.《元龙》 2.《恶魔法则》2023年9月29日 3.《三十六骑》 4.《山河剑心》 5.剑网3侠肝义胆沈剑心 《剑网3侠肝义胆沈剑心》 《剑网3侠肝义胆沈剑心 第二季》 《剑网3侠肝义胆沈剑心之长漂》&#xff08;番外&#xff09; 《剑网3侠肝义胆沈剑心 第三季》 6.《仙逆》东方玄幻…

生产管理系统功能全拆解:哪些功能是企业真正需要的?

制造业的伙伴经常听到“生产管理”&#xff0c;但很多人可能只是模糊地知道它与工厂、生产线有关。那么&#xff0c;到底什么是生产管理呢&#xff1f;它的重要性又体现在哪里呢&#xff1f;接下来&#xff0c;我就以轻松的方式&#xff0c;带大家走进生产管理的世界&#xff0…

微信闪退怎么回事?实用技巧助你轻松应对

在使用微信的过程中&#xff0c;偶尔会遇到闪退的问题&#xff0c;这不仅影响我们的日常沟通&#xff0c;还可能导致重要信息的丢失。那么&#xff0c;微信闪退怎么回事呢&#xff1f;闪退的原因可能有很多&#xff0c;包括软件问题、手机存储不足、系统不兼容等。本文将详细分…

笔记本电脑数据丢失如何恢复?

在计算机网络日益普及的今天&#xff0c;计算机已波及到人们的生活、工作、学习及消费等广泛领域&#xff0c;其服务和管理也涉及政府、工商、金融及用户等诸多方面。笔记本电脑等电子产品被各行各业的人所喜爱和接受&#xff0c;早已成为人们出差的必备品&#xff0c;可以用来…

keepalived高可用集群

一、keepalived&#xff1a; 1.keepalive是lvs集群中的高可用架构&#xff0c;只是针对调度器的高可用&#xff0c;基于vrrp来实现调度器的主和备&#xff0c;也就是高可用的HA架构&#xff1b;设置一台主调度器和一台备调度器&#xff0c;在主调度器正常工作的时候&#xff0…

OS_同步与互斥

2024-07-04&#xff1a;操作系统同步与互斥学习笔记 第9节 同步与互斥 9.1 同步互斥的基本概念9.1.1 同步关系9.1.2 互斥关系9.1.3 临界资源9.1.4 临界区9.1.5 同步机制应遵循规则 9.2 软件同步机制9.2.1 单标志法9.2.2 双标志先检查法9.2.3 双标志后检查法9.2.4 peterson算法 …

jstat命令介绍

jstat&#xff1a;查看JVM统计信息 一 基本情况二 基本语法2.1 option参数1. 类装载相关的&#xff1a;2. 垃圾回收相关的-gc&#xff1a;显示与GC相关的堆信息。包括Eden区、两个Survivor区、老年代、永久代等的容量、已用空间、GC时间合计等信息。-gccapacity&#xff1a;显示…

【C++】C++-机房收费管理系统(源码+注释)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

LeetCode之最长回文子串

1.题目链接 5. 最长回文子串 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/longest-palindromic-substring/description/ 2.题目解析 对于这道题目我们可以使用动态规划的思路来求解&#xff0c;具体思路是&#xff0c;对于一个长度大于2的子串&…

生成式信息检索(问答系统与信息检索的进步)

文章目录 什么是问答系统&#xff08;Question Answering Systems&#xff09;检索系统的演变经典检索系统“Term” 文档搜素的最小单位倒排索引词嵌入的出现预训练语言模型 用于问答的语言模型设计方案选择&#xff1a;封闭式与开放式问答系统对比方案A&#xff1a;封闭式生成…

【干货】一文带你看懂什么是渠道分销?如何管理渠道分销

在当今竞争激烈的市场环境中&#xff0c;企业想要扩大市场份额、提高产品或服务的可见度&#xff0c;有效的渠道分销策略是关键。 什么是渠道分销&#xff1f; 渠道分销&#xff0c;简而言之&#xff0c;是指企业利用中间商&#xff08;如经销商、代理商、零售商等&#xff0…

springboot解压文件流zip压缩包

springboot解压文件流zip压缩包 原始文件存储的地方&#xff1a; 需要在当前目录下解压该文件&#xff0c;如下图&#xff1a; 代码示例&#xff1a; private Result<String> getLocationGuideLayerName(YbYstbtqTaskResolveParam params, String fishnetLayerName)…