# 自製 chrome 擴充套件 我的需求: 希望有個擴充套件可以改變某個網頁的字型(字形改成微軟正黑體)。 ## 一、專案根目錄 建立資料夾,命名 my-extension (可自行命名),my-extension資料夾內建立以下檔案: - background.js // 自動注入 JS - content.js // 你想執行的 JS - manifest.json // 必備的設定檔 ## 二、各檔案內容,貼上下列程式碼 ### background.js (自動注入 JS) ```javascript // background.js chrome.tabs.onUpdated.addListener((tabId, changeInfo, tab) => { // 網址要跟 manifest.json 內的 "host_permissions" 的值一樣 if (changeInfo.status === 'complete' && tab.url.includes("https://law.moj.gov.tw/")) { chrome.scripting.executeScript({ target: { tabId: tabId }, files: ["content.js"] }); } }); ``` 'https://law.moj.gov.tw/' 網址要跟 manifest.json 內的 "host_permissions" 的值一樣,這是你想操控的網頁網址 ----- ### content.js (你想自動執行的 JS) ```javascript console.log("自動注入成功!"); const bodyTag = document.body; // 所有你希望改字體的元素 const list = ['div', 'a', 'p', 'span']; // 字體微軟正黑體 function changeFont() { list.forEach((tag) => { const elements = document.querySelectorAll(tag); elements.forEach((el) => { el.style.fontFamily = 'Arial, 微軟正黑體'; }) }) } changeFont(); // 執行 ``` 這邊我想執行的是,將網頁內的字形改成微軟正黑體、英文字型改成 Arial。 ------ ### manifest.json (必備的設定檔) ```json //manifest.json { "manifest_version": 3, "name": "Auto Run Snippet", "version": "1.0", "description": "自動在特定網頁執行 JavaScript", "permissions": ["scripting", "tabs"], "host_permissions": ["https://law.moj.gov.tw/"], // background.js 內的 tab.url 的值,必須和這個網址一樣 "background": { "service_worker": "background.js" // 這裡放你要自動匯入的background.js檔案(可以自行命名檔案,請注意檔案路徑要正確) }, "action": { "default_title": "Auto Run" } } ``` **host_permissions** 的值換成你希望操控的網址 這裡放的是全國法規資料庫的網頁(因為他們都是新細明體閱讀起來不舒服,我想改成微軟正黑體) ### 以下介紹 manifest.json 內的屬性: :::info 上方程式碼是 Chrome 擴充套件(Extension) 的設定檔,使用的是 Manifest V3(最新的擴充套件格式)。 1. manifest_version: 3 manifest_version 是必須的,用來告訴瀏覽器這個擴充套件使用的是哪個版本的設定規範。 v3 是最新的版本,具有一些新特性,例如背景頁面使用 service_worker,而非舊版的 background 頁面。 2. name: "Auto Run Snippet" name 是擴充套件的名稱,這個名稱會顯示在瀏覽器擴充套件管理頁面,也會顯示在安裝後的擴充套件欄位中。 3. version: "1.0" version 是擴充套件的版本號,這有助於管理更新。 4. description: "自動在特定網頁執行 JavaScript" description 是擴充套件的簡介,告訴用戶這個擴充套件的功能。這裡是說它可以在特定的網站上自動執行 JavaScript 代碼。 5. permissions: ["scripting", "tabs"] permissions 是擴充套件需要的權限。在這裡: scripting:讓擴充套件有權限注入腳本到網頁中。 tabs:讓擴充套件能夠與瀏覽器的標籤頁進行交互,查看標籤頁狀況或操作標籤頁。 6. host_permissions: ["https://example.com/*"] host_permissions 用來指定擴充套件可以在哪些網站上運行。 "https://example.com/*" 表示該擴充套件將只在 example.com 網站上運行,並且可以對該網站進行腳本注入或其他操作。你可以根據需求修改成不同的網址(例如 https://www.google.com/*)。 7. background: { "service_worker": "background.js" } background 設定是擴充套件的背景腳本,它用來處理一些長時間運行的任務,或是監聽一些事件。 使用 service worker(background.js)是 Manifest V3 中的改動,這樣做可以讓擴充套件在背景處於輕量且事件驅動的模式。 background.js 是實際處理背景邏輯的 JavaScript 檔案,通常用來監控或處理某些事件(如網頁加載、按鈕點擊等)。 8. action: { "default_title": "Auto Run" } action 是指擴充套件的圖標按鈕設定,這裡的 default_title 是當用戶將鼠標懸停在擴充套件圖標上時顯示的提示文字。 "Auto Run" 會顯示在圖標上,提醒用戶這個擴充套件的功能。 ::: ---- ### 四、安裝這個擴充套件到 Chrome 打開 Chrome 瀏覽器 輸入網址:[chrome://extensions](chrome://extensions) 開啟右上角的「開發人員模式」 點「載入未封裝項目」,選剛剛的資料夾(例如 my-extension) 成功後它就會在你設定的網站開啟時,自動注入 content.js 裡的代碼! :::info ❗️安全提示 不要加 "<all_urls>" 除非你真的需要全網頁注入,否則建議用明確網址。 ::: 可以加上權限提示或 ```action button``` 做進階控制。 ------ ### 2025.5.5 實際操作 ## 我的資料夾架構 ![image](https://hackmd.io/_uploads/B1JSieUeel.png) 根目錄三隻檔案: - background.js - content.js - manifest.json 根據上面的步驟建立專案、建立檔案並貼上程式碼後,打開chrome瀏覽器,進入頁面: ![image](https://hackmd.io/_uploads/Bk_fal8lgl.png) 或是直接輸入網址: chrome://extensions 然後照著下圖步驟操作: ![image](https://hackmd.io/_uploads/BJg03xUelx.png) :::info 想檢查擴充套件有沒有應用了,可打開F12 console.log 查看~ console.log("自動注入成功!"); ::: 已成功修改全國法規資料庫內網址的文字為微軟正黑體字形。