我是開發 chrome 擴展的新手。我正在嘗試構建一個簡單的擴展,我希望該擴展通過圖示在打開和關閉狀態之間切換。
這是我到目前為止用于實作此目的的代碼:
(背景.js)
var enabled = 1;
chrome.action.onClicked.addListener(function () {
console.log(enabled);
if (enabled == 0) {
enabled = 1;
chrome.action.setIcon({
path: "images/on.png"
});
} else {
enabled = 0;
chrome.action.setIcon({
path: "images/off.png"
});
}
});
然后在同一個檔案中,我正在做我想做的事情。到目前為止這是有效的,但問題是,是的,這個東西適用于 if 陳述句:
if(enabled == 1){
do this...}
但是過了一段時間,由于我無法理解的原因(我已經使用“啟用”變數進行了控制臺日志除錯,它作業正常),擴展程式繼續作業,因為它處于禁用狀態并且圖示顯示它已禁用...
uj5u.com熱心網友回復:
后臺腳本在上一個事件(例如 onClicked)后 30 秒后終止,因此您不能依賴全域變數,因為當后臺腳本在終止后再次啟動新事件時,它們將被重置。
一種解決方案是更改彈出視窗檔案名的哈希部分,這意味著將顯示相同的彈出檔案,但location.hash
會有所不同:
背景腳本:
chrome.action.onClicked.addListener(async () => {
const popup = await chrome.action.getPopup({});
const enabled = popup.includes('#off'); // new value of `enabled`
const newPopup = popup.split('#')[0] (enabled ? '' : '#off');
chrome.action.setIcon({path: `images/${enabled ? 'on' : 'off'}.png`});
await chrome.action.setPopup({popup: newPopup});
});
彈出腳本:
const enabled = !location.hash.includes('#off');
//document.body.prepend('Enabled: ' enabled);
另一種解決方案是將狀態存盤在 chrome.storage.local 中:
chrome.action.onClicked.addListener(async () => {
const enabled = !(await chrome.storage.local.get('enabled')).enabled;
const path = `images/${enabled ? 'on' : 'off'}.png`;
chrome.action.setIcon({path});
await chrome.storage.local.set({enabled});
});
清單.json:
"permissions": ["storage"]
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/469522.html