Google Extension - DashingDigit001/WikiPage GitHub Wiki
-
background scripts :
擴充插件在安裝後需要的持續性的資料來源(persistent variable)
-
content scripts
-
option page
-
UI Elements
-
manifest.json :
此extension的manifest
- 建立空資料夾 -> 裡面建立manifest.json
{
"name": "Getting Started Example",
"description": "Build an Extension!",
"version": "1.0",
"manifest_version": 3
}
-
在瀏覽器網址列上輸入:chrome://extensions
-
切換至Developer Mode(開發者模式)
-
點選Load Unpacked -> 選擇剛剛建立的資料夾
-
下方即可看到剛剛建立的extension
-
接著在manifest.json中加入
"background": {
"service_worker": "background.js"
}
明確指示要讀取的背景js
-
建立background.js -> 監聽事件 runtime.onInstalled
let color = '#3aa757'; //只要在安裝後會觸發 chrome.runtime.onInstalled.addListener(() => { chrome.storage.sync.set({ color }); console.log('Default background color set to %cgreen', `color: ${color}`); });
-
第7步使用了storage API, 因此要在manifest.json中加入:
"permissions": ["storage"]
-
建立UI介面, popup.html和button.css
popup.html
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="button.css">
</head>
<body>
<button id="changeColor"></button>
</body>
</html>
button.css
button {
height: 30px;
width: 30px;
outline: none;
margin: 10px;
border: none;
border-radius: 2px;
}
button.current {
box-shadow: 0 0 0 2px white,
0 0 0 4px black;
}
- 在manifest.json中加入
"action": {
"default_popup": "popup.html"
}
- 在manifest.json中加入各種icons
"action": {
"default_popup": "popup.html",
"default_icon": {
"16": "/images/get_started16.png",
"32": "/images/get_started32.png",
"48": "/images/get_started48.png",
"128": "/images/get_started128.png"
}
},
"icons": {
"16": "/images/get_started16.png",
"32": "/images/get_started32.png",
"48": "/images/get_started48.png",
"128": "/images/get_started128.png"
}
- 建立popup.js
首先先從storage API中抓取我們想要的元素
// Initialize button with user's preferred color
let changeColor = document.getElementById("changeColor");
chrome.storage.sync.get("color", ({ color }) => {
changeColor.style.backgroundColor = color;
});
然後匯入到popup.html中
<script src="popup.js"></script>
- 加入以下程式碼可以建立按鈕事件
// When the button is clicked, inject setPageBackgroundColor into current page
changeColor.addEventListener("click", async () => {
let [tab] = await chrome.tabs.query({ active: true, currentWindow: true });
chrome.scripting.executeScript({
target: { tabId: tab.id },
function: setPageBackgroundColor,
});
});
//以上內容會在插件上的網頁中執行
//以下內容會被動態注入到讀取中的網頁並且執行
function setPageBackgroundColor() {
chrome.storage.sync.get("color", ({ color }) => {
document.body.style.backgroundColor = color;
});
}
上方程式碼有兩個額外的權限需求:
- 讓插件存取當前網頁
- 使用scripting API中的executeScript
因此我們要在manifest.json中加入
"permissions": ["storage", "activeTab", "scripting"],
- 至此更換網頁背景顏色的功能完成
- 到bootstrap官網下載bootstrap的dist並放到extension的資料夾下
- 在步驟第9步的popup.html中head加入
<link rel="stylesheet" href="./bootstrap-5.0.2-dist/css/bootstrap.min.css" />
- 在步驟第9步的popup.html中body加入
<script src="./bootstrap-5.0.2-dist/js/bootstrap.bundle.min.js"></script>
- 如果功能沒有觸發, 需要移除插件在安裝
然後此網頁可以注入可執行的程式碼到現有網頁
runtime.onInstalled, 該事件只會在三種情況下觸發
- 首次安裝完成
- 插件更新
- 瀏覽器更新
在內部我們將使用chrome的storage API, 讓插件的其他元件都能存取到裏面的變數
幾乎所有的API都要經由"註冊"取得權限後才可以使用, 因此在manifest.json中需要建立permissions
步驟中建立的background.js被稱作service worker, 只有在安裝的首次會執行, 可將在此載入一些預設資料
要將我們插件的邏輯操作注入到當前網頁中有兩種處理方式:
- 在manifest.json中宣告host_permissions
- 在permissions中加入activeTab