Chrome插件快速上手

目錄

前言

一、瀏覽器插件的主要功能

二、插件的工作原理

插件結構

manifest.json

icons

background.js

content-scripts

三、插件例子

popup.html

popup.js

styles.css

background.js

content-script.js

manifest.json

四、其它


前言

本文不做特殊說明,均在Manifest V3版本下說明

一、瀏覽器插件的主要功能

  1. 修改網頁內容
  2. 增強瀏覽器功能
  3. 與外部服務交互
  4. 開發者工具

二、插件的工作原理

插件結構

  • manifest.json:插件配置文件
  • background.js:后臺腳本
  • content-script.js:注入頁面的腳本
  • popup:彈窗UI
  • options:插件設置頁面(可選)
  • icons:插件圖標(必須)
  • _locales:多語言支持(可選)

manifest.json

這是Chrome插件最重要也是必不可少的文件,用來配置所有和插件相關的配置,必須放在根目錄中。

下面是一個示例manifest.json,我們將以這個示例切入,逐步說明配置項:

{"manifest_version": 3,"name": "Run script automatically","description": "Runs a script on www.example.com automatically when user installs the extension","version": "1.0","icons": {"16": "images/icon-16.png","32": "images/icon-32.png","48": "images/icon-48.png","128": "images/icon-128.png"},"background": {"service_worker": "service-worker.js"},"content_scripts": [{"js": ["content-script.js"],"matches": ["http://*.example.com//"]}],"permissions": ["scripting", "activeTab"]
}
  • manifest_version:指定擴展程序使用的清單文件格式的版本,唯一支持的值是3
  • name:插件名字
  • version:插件版本號
  • description:插件描述
  • icons:插件圖標
  • background:插件的“后臺腳本
  • content_scripts:用戶打開網頁時,使用的插入腳本
  • permissions:啟用特定擴展API

icons

icons不同的鍵值,圖標會在不同的地方使用:

  • 16:擴展程序頁面和上下文菜單中的圖標
  • 32:Windows計算機需要此大小
  • 48:顯示在"擴展程序"頁面上
  • 128:會在安裝過程中和Chrome應用商店中顯示

background.js

在V3版本中

background.js其實就是“Service Worker”,Service Worker是插件的“核心處理腳本”(大腦)

Service Worker的三個特點:

  • 無持久化運行:僅在需要時激活(如響應事件、處理消息),閑置時會被瀏覽器終止,節省資源
  • 無DOM訪問能力:不能直接操作DOM(document、window等對象不可用),也不發使用alert、confirm等彈窗API
  • 生命周期由瀏覽器管理:無需手動控制啟動 /?關閉,瀏覽器會根據事件自動調度

Service Worker的五個核心功能:

  • 監聽瀏覽器級事件(chrome.runtime.onInstalled、chrome.tabs.onUpdated等)
  • 作為插件各組件的通信中樞
  • 處理跨域請求
  • 管理插件狀態
  • 調度定時任務

content-scripts

用于操作網頁,它一般具有下面五個能力:

  1. 修改網頁DOM可以直接讀取、修改當前網頁的HTML結構、CSS樣式或文本內容。
  2. 獲取網頁信息:能夠提取網頁中的數據(文本、圖片鏈接等等),并通過插件的其他部分進行處理或上傳
  3. 注入交互邏輯:可以為網頁添加自定義的交互功能,比如添加新按鈕、綁定事件監聽,實現網頁原本沒有的功能
  4. 隔離性運行:雖然能訪問網頁DOM,但內容腳本運行在獨立的沙盒環境中,不能直接訪問網頁自身的JavaScript變量/函數,也不能直接訪問插件的后臺腳本變量,安全性高
  5. 跨域請求能力:相比普通網頁腳本,內容腳本可以通過插件的后臺頁面間接發起跨域請求

三、插件例子

整個插件結構如下:

-extension-icons-logo.png-popup-popup.html-popup.js-styles.css-backrgound.js-content-script.js-manifest.json

popup.html

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>Page Info</title><link rel="stylesheet" href="styles.css">
</head>
<body><div class="container"><h1>當前頁面信息</h1><p id="title">標題:加載中...</p><p id="url">URL:加載中...</p><button id="changeBg">隨機背景色</button></div><script src="popup.js"></script>
</body>
</html>

popup.js

// 獲取當前標簽頁信息
chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => {const tab = tabs[0];document.getElementById('title').textContent = `標題:${tab.title}`;document.getElementById('url').textContent = `URL:${tab.url}`;
});// 點擊按鈕修改頁面背景色
document.getElementById('changeBg').addEventListener('click', () => {const colors = ['#ffcccc', '#ccffcc', '#ccccff', '#ffffcc'];const randomColor = colors[Math.floor(Math.random() * colors.length)];// 向內容腳本發送消息chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => {chrome.tabs.sendMessage(tabs[0].id, { action: "changeBg", color: randomColor });});
});

styles.css

body {width: 300px;padding: 10px;font-family: Arial, sans-serif;
}
button {padding: 8px;background: #4CAF50;color: white;border: none;cursor: pointer;
}

background.js

// Manifest V3使用Service Worker,無需常駐后臺
console.log("Service Worker已加載");

content-script.js

// 監聽來自popup的消息
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {if (request.action === "changeBg") {document.body.style.backgroundColor = request.color;}
});

manifest.json

{"name": "Page Info Viewer","version": "1.0","manifest_version": 3,"description": "顯示當前頁面的標題和URL,并修改背景色","permissions": ["activeTab", "scripting"],"icons": {"16": "icons/logo.png",    "48": "icons/logo.png",   "128": "icons/logo.png"   },"action": {"default_popup": "popup/popup.html"},"background": {"service_worker": "background.js"},"content_scripts": [{"matches": ["<all_urls>"],"js": ["content-script.js"]}]
}

效果:

四、其它

如果您對該文感興趣,可以參考我的專欄:

https://blog.csdn.net/zheshiyangyang/category_13023388.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/92571.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/92571.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/92571.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

moment和dayjs

一&#xff1a;moment和dayjs 區別moment 大且可變、維護模式&#xff1b;dayjs 小且不可變、插件化、tree?shaking 友好。antd v4 用 moment&#xff1b;antd v5 用 dayjs。請在同一項目中統一其一&#xff0c;避免混用導致組件報錯。二&#xff1a; antd 4.24.16&#xff08…

Flutter Packge - 組件應用

一、組件創建1. 在工程根目錄創建 packages 目錄。mkdir packages #創建文件夾 cd packages 2. 創建純 Dart Package&#xff08;適合工具類/UI組件&#xff09;。flutter create --templatepackage common_network二、組件配置1. 在 common_network 的 pubspec.yaml 中添加…

基于雙塊輕量級神經網絡的無人機拍攝的風力渦輪機圖像去霧方法

基于雙塊輕量級神經網絡的無人機拍攝的風力渦輪機圖像去霧方法 UAV-Taken Wind Turbine Image Dehazing With a Double-Patch Lightweight Neural Network 我是菜雞&#xff01;我是菜雞&#xff01;我是菜雞&#xff01; 如果老師及學姐學長對該文有任何意見&#xff0c;請…

Spring AI Alibaba 項目接入阿里云百煉平臺大模型

1 依賴jdk 21 springboot 3.4.5 spring-ai-alibaba-starter-dashscope 1.0.0.2<properties><java.version>21</java.version><spring-ai.version>1.0.0</spring-ai.version><spring-ai-alibaba.version>1.0.0.2</spring-ai-alibaba.v…

電腦和手機訪問網站,自動檢測跳轉不同網站

自動檢測跳轉不同網站 自動檢測設備手機或電腦來跳轉不同網頁 開箱即用&#xff0c;不過需要自己修改一下跳轉鏈接 源碼截圖&#xff1a; 下載地址&#xff1a;電腦和手機訪問網站&#xff0c;自動檢測跳轉不同網站.zip - 藍奏云

Spring Boot 集成 ShardingSphere 實現讀寫分離實踐

Spring Boot 集成 ShardingSphere 實現讀寫分離實踐 在高并發的業務場景中,數據庫往往是系統性能的瓶頸。為了提高系統的吞吐量和穩定性,讀寫分離是一種常見的優化方案。本文將詳細介紹如何使用 Spring Boot 結合 ShardingSphere 實現數據庫的讀寫分離,并提供完整的配置和實…

以rabbitmq為例演示podman導出導入鏡像文件

1. 導出鏡像為 tar 文件 將鏡像保存為壓縮包&#xff08;默認格式為 docker-archive&#xff09;&#xff1a; podman save -o rabbitmq_management.tar docker.io/rabbitmq:management-o&#xff1a;指定輸出文件名&#xff08;如 rabbitmq_management.tar&#xff09;。鏡像名…

LIS(最長上升子序列)與LCS(最長公共子序列)

最長上升子序列定義&#xff1a;給出一個數字序列&#xff08;arr&#xff09;&#xff0c;求出其中長度最長的數值嚴格遞增的子序列做法一&#xff1a;使用動態規劃&#xff0c;我們定義dp[i]為以arr[i]結尾的最長上升子序列的長度。#include<bits/stdc.h> using namesp…

javaSE(基礎):5.抽象類和接口

抽象類一.理解抽象類思維&#xff1a;假如我想定義一個Shape&#xff08;圖形類&#xff09;類&#xff0c;我在這個類中寫了一個draw()方法&#xff0c;但是這個方法是不能用來描述圖形形狀的&#xff08;不能有方法體&#xff09;&#xff0c;因為我只要對他進行了準確描述&a…

ESG評級可持續發展之路,ESG評級的好處

在商業文明的演進歷程中&#xff0c;ESG評級正成為衡量企業價值的全新坐標系。這套融合環境&#xff08;Environmental&#xff09;、社會&#xff08;Social&#xff09;和治理&#xff08;Governance&#xff09;三大維度的評估體系&#xff0c;猶如一盞明燈&#xff0c;指引…

camera人臉識別問題之二:【FFD】太陽逆光場景,人像模式后置打開美顏和濾鏡,關閉heif拍攝格式對著人臉拍照,成像口紅出現位置錯誤

【關注我&#xff0c;后續持續新增專題博文&#xff0c;謝謝&#xff01;&#xff01;&#xff01;】 上一篇我們講了&#xff1a; 這一篇我們開始講&#xff1a; camera人臉識別問題之二&#xff1a;【FFD】太陽逆光場景&#xff0c;人像模式后置打開美顏和濾鏡&#xff0c;關…

YOLO-Count:用于文本到圖像生成的可微分目標計數

摘要 https://arxiv.org/pdf/2508.00728v1 我們提出了YOLO-Count&#xff0c;一種可微分的開放詞匯目標計數模型&#xff0c;旨在解決通用計數挑戰并實現文本到圖像(T2I)生成的精確數量控制。核心貢獻是"基數"圖(cardinality map)&#xff0c;這是一種新穎的回歸目標…

Go 的錯誤處理方式深度解析—— error vs panic vs recover:機制原理與實戰取舍

一、Go 的錯誤處理哲學Go 的設計哲學鼓勵明確的、顯式的錯誤處理方式。它不像 Java 或 Python 使用異常機制&#xff0c;而是采用了返回值 error 的方式&#xff0c;讓錯誤成為程序流程的一部分。Go 的錯誤處理核心理念是&#xff1a; 錯誤是值&#xff08;Errors are values&a…

官方Windows系統部署下載工具實踐指南

摘要&#xff1a;本文介紹兩款用于獲取微軟正版系統部署文件的工具&#xff0c;適用于需要快速搭建Windows環境的技術人員。所有工具均基于官方渠道實現&#xff0c;不涉及系統修改或激活功能。一、Windows系統鏡像下載方案工具名稱&#xff1a;Windows鏡像直鏈下載工具 核心功…

Pandas query() 方法詳解

Pandas query() 方法詳解query() 是 Pandas 中一個非常強大的方法&#xff0c;它允許你使用字符串表達式來篩選數據行。這種方法比傳統的布爾索引更簡潔、更易讀。基本語法df.query(expr, inplaceFalse, **kwargs)expr: 查詢字符串表達式inplace: 是否原地修改 DataFrame (默認…

Linux系統層IO

1.c語言文件操作 fopen&#xff1a;打開文件&#xff0c;模式 "w"&#xff08;寫&#xff0c;覆蓋&#xff09;或 "r"&#xff08;讀&#xff09;。 fwrite&#xff1a;fwrite(data, size, count, fp)&#xff0c;按 size 字節寫入 count 次數據。 fread…

QT中的trimmed() 方法(1)

QT中的trimmed() 方法&#xff08;2&#xff09; trimmed() 是 Qt 框架 中 QString 類提供的一個方法&#xff0c;用于 去除字符串首尾的空白字符&#xff08;whitespace characters&#xff09;。它的作用類似于標準 C 中的 std::string 的 trim 操作&#xff0c;但專為 Qt 的…

動漫軟件集合分享

通過網盤分享的文件&#xff1a;動漫軟件 鏈接: https://pan.baidu.com/s/1TD_OmaAZksfFxJ4PW6rS-w?pwd1234 提取碼: 1234 打印動漫.apk 當鳥動漫.apk 動漫共和國【OmoFun復活】.apk 咕咕香.apk 黑貓動漫.apk 團次元【推薦】.apk 橘漫.apk 曼波.apk 萌國.apk 趣動漫.apk 三…

Mysql與Ooracle 索引失效場景對比

MySQL 和 Oracle 作為主流關系型數據庫&#xff0c;其索引失效的場景既有共性&#xff0c;也因底層優化器、索引類型支持等差異存在不同。以下從常見索引失效場景對比兩者的表現及原因&#xff1a;一、索引列上使用函數 / 表達式共性&#xff1a;若直接在索引列上使用函數或表達…

【unity知識】unity使用AABB(軸對齊包圍盒)和OBB(定向包圍盒)優化碰撞檢測

文章目錄前言一、AABB&#xff08;軸對齊包圍盒&#xff09;1、基本概念2、數學表示3、Unity中的實現4、實際應用示例二、OBB&#xff08;有向包圍盒&#xff09;1、Physics.ComputePenetration (Unity 物理引擎)1.1 基本概念1.2 Unity中的實現1.3 實際應用示例2、OBB (SAT) 手…