å®ç°ä¸ä¸ªè®¾ç½®é¡µé¢
设置页é¢å¯ä»¥è®©ç¨æ·æ¥çï¼ä¿®æ¹æ©å±çä¸äºè®¾ç½®ã
å¯¹äº WebExtensionsï¼è®¾ç½®éå¸¸ä½¿ç¨ storage API ä¿åãå®ç°ä¸ä¸ªè®¾ç½®é¡µé¢é常å
å«ä»¥ä¸ä¸æ¥ï¼
- å¶ä½ä¸ä¸ª HTML æä»¶ç¨ä»¥æ¾ç¤ºå¹¶ä¿®æ¹è®¾ç½®
- åä¸ä¸ªå å«äºè¯¥ HTML æä»¶çèæ¬ï¼å ¶å¯ä»¥ä½¿è®¾ç½®é¡µé¢åå¨ä¸åå¨è®¾å¤ä¸å¹¶å¨ç¨æ·ä¿®æ¹åæ´æ°ä»ã
- å¨ manifest.json æä»¶
options_uiå ³é®åä¸ è®¾ç½® HTML æä»¶çè·¯å¾ãéè¿è¿ç§æ¹å¼ï¼è¯¥ HTML å°ä¼è¢«æ¾ç¤ºæµè§å¨ç®¡çå¨é该æä»¶åååæè¿°çæè¾¹ã
夿³¨ï¼ä½ ä¹å¯ä»¥ä½¿ç¨ runtime.openOptionsPage() æå¼è¯¥é¡µé¢ã
ç®åç WebExtension
é¦å ï¼æä»¬åä¸ä¸ªåç¨æ·è®¿é®çææé¡µé¢æ·»å ä¸ä¸ªèè²è¾¹æ¡çæ©å±ã
å建ä¸ä¸ªæ°çæä»¶å¤¹å½å为âsettingâï¼ç¶åå建æä»¶âmanifest.jsonâå®å å«ä»¥ä¸å 容ï¼
{
"manifest_version": 2,
"name": "Settings example",
"version": "1.0",
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": ["borderify.js"]
}
]
}
该æ©å±æç¤ºæµè§å¨å¨ç¨æ·è®¿é®çç½ç«ä¸å è½½ä¸ä¸ªå为"borderify.jsâç Content Scriptã
æ¥ä¸æ¥ï¼å¨"setting"ç®å½ä¸å建"borderify.js"ï¼ç¶åç»äºä»ä»¥ä¸å 容ï¼
document.body.style.border = "10px solid blue";
è¿åªæ¯åç½é¡µå å ¥äºä¸ä¸ä¸ªèè²è¾¹æ¡
ç°å¨ å®è£ 该æ©å± å¹¶æµè¯å®ââæå¼ä»»æä¸ä¸ªç½é¡µï¼
æ·»å 设置页é¢
ç°å¨è®©æä»¬å建ä¸ä¸ªè®¾ç½®é¡µé¢æ¥å è®¸ç¨æ·è®¾ç½®è¾¹æ¡çé¢è²ã
é¦å æ´æ° "manifest.json" ä½¿ä»æ¥æå¦ä¸å 容ï¼
{
"manifest_version": 2,
"name": "Settings example",
"version": "1.0",
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": ["borderify.js"]
}
],
"options_ui": {
"page": "options.html"
},
"permissions": ["storage"]
}
æä»¬å å ¥äºä¸¤ä¸ª manifest å ³é®åï¼
options_ui: 设置äºä¸ä¸ª HTML æ¥ä½ä¸ºè®¾ç½®é¡µé¢ãpermissions: æä»¬ä½¿ç¨storageAPI æ¥ä¿åè®¾ç½®ï¼æä»¥æä»¬éè¦è¯·æ±æéæ¥ä½¿ç¨è¯¥ APIã
æ¥ä¸æ¥ï¼å 为æä»¬æ¿è¯ºæä¾"options.html"ï¼è®©æä»¬æ¥å建ä»ï¼å¨"setting"ç®å½å建ä¸ä¸ªè¯¥æä»¶å¹¶å ·æä»¥ä¸å 容ï¼
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
</head>
<body>
<form>
<label>Border color<input type="text" id="color" /></label>
<button type="submit">Save</button>
</form>
<script src="options.js"></script>
</body>
</html>
è¿éå®ä¹äºä¸ä¸ªå¸¦ææ è®°æå<input>ç <form> åä¸ä¸ª æäº¤ <button>. ä¹å
å«äºä¸ä¸ªå为"options.js"çèæ¬ã
ä»ç¶å¨"settting"ç®å½ä¸å建 "options.js"ï¼å¹¶ç»äºä»ä»¥ä¸å 容ï¼
function saveOptions(e) {
e.preventDefault();
browser.storage.local.set({
color: document.querySelector("#color").value,
});
}
function restoreOptions() {
function setCurrentChoice(result) {
document.querySelector("#color").value = result.color || "blue";
}
function onError(error) {
console.log(`Error: ${error}`);
}
var getting = browser.storage.local.get("color");
getting.then(setCurrentChoice, onError);
}
document.addEventListener("DOMContentLoaded", restoreOptions);
document.querySelector("form").addEventListener("submit", saveOptions);
å®åäºä¸¤ä»¶äºï¼
- å½ç½é¡µè¢«å è½½å®ä½¿ç¨
storage.local.get()ä»å贮设å¤ä¸è·åäºå为"colorâçå¼ãå¦æè¯¥å¼æªè¢«è®¾ç½®å ¶ä¸ºé»è®¤å¼ blueã - å½ç¨æ·ç¹å»æäº¤æé®ï¼ä½¿ç¨
storage.local.set()åè´®é¢è²å¼ã
æåï¼æ´æ°"borderify.js" æ¥è¯»åè¾¹æ¡é¢è²ï¼
è¦åï¼å 为 browser.storage.local.get() å¨ç«ç 52 çæ¬ä¹åçä¸ä¸ªæ¼æ´ï¼ä»¥ä¸ä»£ç 没æ³èµ·ä½ç¨ã为äºä½¿å®çæï¼onGot() ä¸ç item.color å¿
é¡»æ¹ä¸º item[0].colorã
function onError(error) {
console.log(`Error: ${error}`);
}
function onGot(item) {
var color = "blue";
if (item.color) {
color = item.color;
}
document.body.style.border = "10px solid " + color;
}
var getting = browser.storage.local.get("color");
getting.then(onGot, onError);
æåï¼å®æ´çæ©å±çèµ·æ¥æ¯è¿æ ·ï¼
settings/
borderify.js
manifest.json
options.html
options.js
ç°å¨ï¼
- éæ°è½½å ¥æ©å±
- å è½½ä¸ä¸ªç½é¡µ
- æå¼è®¾ç½®é¡µé¢å¹¶ä¿®æ¹è¾¹æ¡é¢è²
- éè½½ç½é¡µæ¥çååã
å¨ç«çä¸ä½ å¯ä»¥éè¿è®¿é®"about:addons"ç¹å»æ©å±æè¾¹ç"Preferences"æé®è®¿é®è®¾ç½®é¡µé¢ã
è¿ä¸æ¥äºè§£
options_uiå ³é®åææ¡£storageAPI ææ¡£- 使ç¨
runtime.openOptionsPage()ç´æ¥æå¼ä½ çè®¾ç½®é¡µé¢ - å¦ä¸ä¸ªè®¾ç½®é¡µé¢ä¾åï¼