從零開發Chrome廣告攔截插件:開發、打包到發布全攻略

從零開發Chrome廣告攔截插件:開發、打包到發布全攻略

想打造一個屬于自己的Chrome插件,既能攔截煩人的廣告,又能優雅地發布到Chrome Web Store?別擔心,這篇教程將帶你從零開始,動手開發一個功能強大且美觀的廣告攔截插件,涵蓋編碼、打包和上架的全過程。無論你是新手還是老司機,跟著這篇指南,保證你能輕松上手,做出一個讓人驚艷的小工具!


1 開發你的廣告攔截插件:從創意到代碼實現

開發Chrome插件的第一步是明確功能:我們要實現一個可切換開關、支持自定義規則的廣告攔截器。讓我們一步步把創意變成現實!

1.1 準備開發環境與文件結構

動手前,先把工具和文件準備好,就像搭積木前要整理好零件。

1.1.1 選擇IDE
  • 推薦工具:Visual Studio Code(簡稱VS Code),輕量且支持Chrome調試插件。
  • 為什么選它:內置終端、代碼高亮、擴展豐富,簡直是開發插件的神器!
1.1.2 創建項目文件夾
  • 目錄結構:新建一個名為AdBlocker的文件夾,包含以下文件:
AdBlocker/
├── manifest.json       # 插件的核心配置文件
├── background.js       # 后臺腳本,處理攔截邏輯
├── popup.html          # 彈出窗口界面
├── popup.js            # 彈出窗口邏輯
├── options.html        # 設置頁面
├── options.js          # 設置頁面邏輯
└── images/             # 圖標文件夾├── icon16.png      # 16x16像素圖標├── icon48.png      # 48x48像素圖標└── icon128.png     # 128x128像素圖標

1.2 編寫核心文件

現在,拿起鍵盤,開始敲代碼吧!

1.2.1 配置manifest.json
  • 作用:這是插件的“身份證”,告訴Chrome你的插件是誰、能干啥。
  • 代碼示例
{"manifest_version": 3,"name": "Ad Blocker with Toggle","version": "1.0","description": "A customizable ad blocker","permissions": ["declarativeNetRequest","storage","downloads"],"host_permissions": ["<all_urls>"],"action": {"default_popup": "popup.html","default_icon": {"16": "images/icon16.png","48": "images/icon48.png","128": "images/icon128.png"}},"background": {"service_worker": "background.js"},"options_page": "options.html"
}

亮點:Manifest V3是最新標準,支持Service Worker,權限聲明清晰。

1.2.2 實現后臺邏輯background.js

功能:攔截廣告請求,根據用戶設置動態更新規則。
代碼示例:

const defaultRules = [{ id: 1, priority: 1, action: { type: "block" }, condition: { urlFilter: "||example-ads.com^", resourceTypes: ["script"] } }
];function updateRules(isEnabled, customAdList = []) {const rules = isEnabled ? [...defaultRules,...customAdList.map((url, index) => ({id: index + 2,priority: url.startsWith("@@") ? 2 : 1,action: { type: url.startsWith("@@") ? "allow" : "block" },condition: { urlFilter: url.startsWith("@@") ? url.slice(2) : url, resourceTypes: ["script", "image"] }}))] : [];chrome.declarativeNetRequest.updateDynamicRules({removeRuleIds: Array.from({ length: defaultRules.length + customAdList.length }, (_, i) => i + 1),addRules: rules});
}chrome.runtime.onInstalled.addListener(() => {chrome.storage.sync.get(["isEnabled", "customAdList"], (data) => {updateRules(data.isEnabled !== false, data.customAdList || []);});
});chrome.runtime.onMessage.addListener((message) => {if (message.action === "updateRules") {chrome.storage.sync.get("customAdList", (data) => {updateRules(message.isEnabled, data.customAdList || []);});}
});
1.2.3 打造炫酷的彈出窗口popup.html

功能:提供開關按鈕和跳轉設置的入口。
代碼示例:

<!DOCTYPE html>
<html>
<head><title>Ad Blocker</title><style>body { width: 250px; padding: 15px; font-family: Arial, sans-serif; background: #f5f5f5; box-shadow: 0 2px 10px rgba(0,0,0,0.1); }h2 { font-size: 20px; color: #333; text-align: center; }#toggleButton { width: 100%; padding: 12px; font-size: 16px; border: none; border-radius: 5px; background: #007bff; color: white; }#toggleButton:hover { background: #0056b3; }a { display: block; text-align: center; color: #007bff; text-decoration: none; }a:hover { color: #0056b3; text-decoration: underline; }</style>
</head>
<body><h2>Ad Blocker</h2><button id="toggleButton">Enable Ad Blocking</button><a href="options.html" target="_blank">Edit Ad List</a><script src="popup.js"></script>
</body>
</html>
菜單效果圖如下:

請添加圖片描述

1.2.4 添加交互邏輯popup.js
JavaScript (英語)
document.addEventListener("DOMContentLoaded", () => {const toggleButton = document.getElementById("toggleButton");chrome.storage.sync.get("isEnabled", (data) => {toggleButton.textContent = data.isEnabled !== false ? "Disable Ad Blocking" : "Enable Ad Blocking";});toggleButton.addEventListener("click", () => {chrome.storage.sync.get("isEnabled", (data) => {const newState = !data.isEnabled;chrome.storage.sync.set({ isEnabled: newState }, () => {toggleButton.textContent = newState ? "Disable Ad Blocking" : "Enable Ad Blocking";chrome.runtime.sendMessage({ action: "updateRules", isEnabled: newState });});});});
});
1.2.5 美化設置頁面options.html與options.js

功能:支持規則編輯、導入導出。
代碼示例(精簡版):

HTML格式
<!DOCTYPE html>
<html>
<head><title>Ad Blocker Options</title><style>body { width: 700px; padding: 20px; font-family: Arial, sans-serif; background: #f5f5f5; }#adList { width: 100%; height: 400px; border-radius: 5px; }button { padding: 12px 24px; border-radius: 5px; background: #007bff; color: white; }button:hover { background: #0056b3; }</style>
</head>
<body><h1>Edit Ad Block List</h1><textarea id="adList"></textarea><button id="saveButton">Save</button><button id="exportButton">Export</button><button id="importButton">Import</button><input type="file" id="importFile" accept=".txt"><script src="options.js"></script>
</body>
</html>
效果圖如下:

請添加圖片描述

實現按鈕邏輯代碼:

document.addEventListener("DOMContentLoaded", () => {const adList = document.getElementById("adList");const saveButton = document.getElementById("saveButton");if (!adList || !saveButton) return;chrome.storage.sync.get("customAdList", (data) => {adList.value = (data.customAdList || []).map(url => url.startsWith("@@||") ? url.replace("@@||", "@@").replace("^", "") : url.replace("||", "").replace("^", "")).join("\n");});saveButton.addEventListener("click", () => {const formattedList = adList.value.split("\n").map(domain => domain.startsWith("@@") ? `@@||${domain.slice(2)}^` : `||${domain}^`);chrome.storage.sync.set({ customAdList: formattedList }, () => {chrome.runtime.sendMessage({ action: "updateRules", isEnabled: true });});});
});

2 測試與打包:讓插件準備好“出道”

代碼寫好后,別急著發布,先測試一下,然后打包成正式文件。

2.1 本地測試

步驟:
打開chrome://extensions/,啟用“開發者模式”。
點擊“加載已解壓的擴展程序”,選擇AdBlocker文件夾。
點擊圖標,測試開關和規則編輯功能。
檢查點:控制臺無錯誤,廣告被攔截。
測試正常,效果圖如下:
請添加圖片描述
請添加圖片描述

2.2 打包為ZIP文件

方法1:Chrome打包:
在chrome://extensions/點擊“打包擴展”。
選擇AdBlocker文件夾,生成.crx和.pem文件。
將.crx改名為.zip。
方法2:手動壓縮:
用壓縮軟件將AdBlocker文件夾打包為AdBlocker.zip,確保根目錄有manifest.json。

3 發布到Chrome Web Store:讓全世界用上你的插件

是時候讓你的插件閃亮登場了!

3.1 創建開發者賬戶

步驟:
訪問 Chrome Web Store Developer Dashboard。
用Google賬戶登錄,支付$5注冊費。
同意開發者條款。

3.2 上傳與發布

詳細流程:
點擊“添加新項目”,上傳AdBlocker.zip。
填寫信息:
名稱:Ad Blocker with Toggle
名稱:帶切換的廣告攔截器
描述:A customizable ad blocker with toggle and list management.
描述:具有切換和列表管理的可自定義廣告攔截器。
圖標:上傳icon128.png。
截圖:準備1280x800的界面截圖(彈出窗口和設置頁面)。
聲明權限理由:Used to block ads and manage user settings.
聲明權限理由:用于攔截廣告和管理用戶設置。
點擊“提交審核”,選擇“公開”發布。

3.3 等待審核與后續維護

審核時間:1-7天。
更新方法:修改version,重新打包上傳。

4 小貼士與注意事項

合規性:避免過度權限,確保描述清晰。
備份:保存.pem私鑰和源代碼。

完整源碼:https://github.com/qyhua0/cp_ad_block_new

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

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

相關文章

基于騰訊云高性能HAI-CPU的跨境電商客服助手全鏈路解析

跨境電商的背景以及痛點 根據Statista數據&#xff0c;2025年全球跨境電商市場規模預計達6.57萬億美元&#xff0c;年增長率保持在12.5% 。隨著平臺規則趨嚴&#xff08;如亞馬遜封店潮&#xff09;&#xff0c;更多賣家選擇自建獨立站&#xff0c;2024年獨立站占比已達35%。A…

maven的項目構建

常用構建命令 命令說明mvn clean清理編譯結果&#xff08;刪掉target目錄&#xff09;mvn compile編譯核心代碼&#xff0c;生成target目錄mvn test-compile編譯測試代碼&#xff0c;生成target目錄mvn test執行測試方法mvn package打包&#xff0c;生成jar或war文件mvn insta…

定時任務和分布式任務框架

文章目錄 一 Spring Task1.@Scheduled注解介紹2 基本用法(1)使用@EnableScheduling修飾啟動類(2)創建定時任務的類(3)fixedDelay(4)fixedRate(5)cron3 執行多個任務4 設置異步執行5 @Async使用自定義線程池6 缺點二 xxl-job介紹架構圖與其他任務調度平臺的比較運行調…

git安裝,配置SSH公鑰(查看版本、安裝路徑,更新版本)git常用指令

目錄 一、git下載安裝 1、下載git 2、安裝Git?&#xff1a; 二、配置SSH公鑰 三、查看安裝路徑、查看版本、更新版本 四、git常用指令 1、倉庫初始化與管理 2、配置 3、工作區與暫存區管理 4、提交 5、分支管理 6、遠程倉庫管理 7、版本控制 8、其他高級操作 一…

[Web]ServletContext域(Application)

簡介 Web應用的Application域的實現是通過ServletContext對象實現的。整個Web應用程序的所有資源共享這個域。生命周期與Web應用程序相同&#xff0c;即當前Web應用程序啟動時&#xff08;以服務器視角而非訪客視角&#xff09;出生&#xff0c;Web應用服務程序關閉時停止。 通…

qt c++ 進程和線程

在Qt C開發中&#xff0c;進程&#xff08;Process&#xff09;和線程&#xff08;Thread&#xff09;是兩種不同的并發模型&#xff0c;各有適用場景和實現方式。以下是詳細對比和實際開發中的用法總結&#xff1a; 一、進程&#xff08;Process&#xff09; 進程是操作系統資…

【鴻蒙開發】OpenHarmony調測工具hdc使用教程(設備開發者)

00. 目錄 文章目錄 00. 目錄01. OpenHarmony概述02. hdc簡介03. hdc獲取04. option相關的命令05. 查詢設備列表的命令06. 服務進程相關命令07. 網絡相關的命令08. 文件相關的命令09. 應用相關的命令10. 調試相關的命令11. 常見問題12. 附錄 01. OpenHarmony概述 OpenHarmony是…

手寫簡易Tomcat核心實現:深入理解Servlet容器原理

目錄 一、Tomcat概況 1. tomcat全局圖 2.項目結構概覽 二、實現步驟詳解 2.1 基礎工具包&#xff08;com.qcby.util&#xff09; 2.1.1 ResponseUtil&#xff1a;HTTP響應生成工具 2.1.2 SearchClassUtil&#xff1a;類掃描工具 2.1.3 WebServlet&#xff1a;自定義注解…

【Java開發指南 | 第三十四篇】IDEA沒有Java Enterprise——解決方法

讀者可訂閱專欄&#xff1a;Java開發指南 |【CSDN秋說】 文章目錄 1、新建Java項目2、單擊項目名&#xff0c;并連續按兩次shift鍵3、在搜索欄搜索"添加框架支持"4、勾選Web應用程序5、最終界面6、添加Tomcat 1、新建Java項目 2、單擊項目名&#xff0c;并連續按兩次…

在MATLAB中實現PID控制仿真

在MATLAB中實現PID控制仿真可以通過代碼編程或Simulink圖形化建模兩種方式完成。以下是兩種方法的詳細操作步驟和示例&#xff1a; 方法1&#xff1a;使用MATLAB腳本編程&#xff08;基于控制系統工具箱&#xff09; 步驟1&#xff1a;定義被控對象的數學模型 假設被控對象是…

Conda常用命令匯總

Conda 是一個流行的包管理器和環境管理工具&#xff0c;廣泛應用于數據科學、機器學習等領域。它可以幫助我們管理 Python 包以及不同版本的環境&#xff0c;避免包沖突&#xff0c;提升項目的可復現性。以下是一些常用的 Conda 命令&#xff0c;涵蓋環境創建、管理、包安裝等常…

大數據實時分析:ClickHouse、Doris、TiDB 對比分析

1. 引言 在大數據分析領域,實時分析需求越來越重要。ClickHouse、Doris 和 TiDB 作為當前流行的實時分析數據庫,各自針對不同的應用場景和數據特性進行了優化。本文將對比它們的核心架構、適用場景以及查詢優化方法,幫助數據開發人員選擇合適的工具。 2. 核心架構對比 2.…

藍橋杯歷年真題題解

1.軌道炮&#xff08;數學模擬&#xff09; #include <iostream> #include <map> using namespace std; const int N1010; int x[N],y[N],v[N]; char d[N]; int main() {int n;int ans-100;cin>>n;for(int i1;i<n;i)cin>>x[i]>>y[i]>>v…

Pytorch的一小步,昇騰芯片的一大步

Pytorch的一小步&#xff0c;昇騰芯片的一大步 相信在AI圈的人多多少少都看到了最近的信息&#xff1a;PyTorch最新2.1版本宣布支持華為昇騰芯片&#xff01; 1、 發生了什么事兒&#xff1f; 在2023年10月4日PyTorch 2.1版本的發布博客上&#xff0c;PyTorch介紹的beta版本…

嵌入式硬件篇---手柄控制控制麥克納姆輪子

文章目錄 前言1. 變量定義2. 搖桿死區設置3. 模式檢查4. 搖桿數據處理4.1 右搖桿垂直值&#xff08;psx_buf[7]&#xff09;4.2 右搖桿水平值&#xff08;psx_buf[8]&#xff09;4.3 左搖桿水平值&#xff08;psx_buf[5]&#xff09;4.4 左搖桿垂直值&#xff08;psx_buf[6]&am…

阿里千問大模型(Qwen2.5-VL-7B-Instruct)部署

參考鏈接 知乎帖子 B站視頻 huggingface 鏡像網站&#xff08;不太全&#xff0c;比如 Qwen/Qwen2.5-VL-7B-Instruct就沒有&#xff09; huggingface 5種下載方式匯總 通過huggingface-cli下載模型 不一樣的部分是預訓練權重的下載和demo 首先安裝huggingface_hub pip insta…

Jenkins在Windows上的使用(二):自動拉取、打包、部署

&#xff08;一&#xff09;Jenkins全局配置 訪問部署好的Jenkins服務器網址localhost:8080&#xff0c;完成默認插件的安裝后&#xff0c;接下來將使用SSH登錄遠程主機以實現自動化部署。 1. 配置插件 選擇dashboard->Manage Jenkins->plugins 安裝下面兩個插件  …

群暉DS 223 Docker:開啟私有云

群暉DS 223 Docker&#xff1a;開啟私有云的無限可能 引言 在數據存儲與管理的不斷演進中&#xff0c;群暉 DS 223 憑借其出色的性能和豐富的功能&#xff0c;成為眾多用戶搭建私有云的熱門選擇。而當它與 Docker 技術相遇&#xff0c;猶如為數據管理的舞臺添上了絢麗多彩的燈…

git切換版本

git brach 查看本地 剛從git上下載下來 的話 可以通過 git checkout xxxx進行切換 可能一段時間沒有用 而服務器上新建了某些版本 那么需要用 git fetch origin 同步本地與git服務器的分支 然后 創建本地分支xxx 并從服務器拉取xxx git checkout -b xxx origin/xxx…

Three.js 進階(燈光陰影關系和設置、平行光、陰影相機)

本篇主要學習內容 : 燈光與陰影聚光燈點光源平行光陰影相機和陰影計算投射陰影接受陰影 點贊 關注 收藏 學會了 1.燈光與陰影 1、材質要滿足能夠對光有反應 2、設置渲染器開啟陰影計算 renderer.shadowMap.enabledtrue 3、設置光照投射陰影 directionalLight.castShadow …