[chrome extension]setIntervalタイマ


[質問]

  • タイマーを使用したsetIntervalを間欠運転しない
  • 新しいウィンドウを開いたとき、背景.jsの再稼働に伴いtabidが「」に初期化
  • setInterval


    マニフェストV 3に移行し、chrome alarms APIに変更
    https://developer.chrome.com/docs/extensions/mv3/migrating_to_service_workers/#alarms
    chrome.alarms.create({ when:Date.now(), periodInMinutes: 1/60});
    chrome.alarms.onAlarm.addListener(() => {
       // Do Action
    });
  • マニフェストにPermission「アラーム」を追加
  • when:開始時間periodInMinutes:イベント発生間隔.設定しない場合は、when1回のみ動作
  • New Window初期化の問題


    Chromeのローカルストレージに格納
    chrome.storage.local.get(['docongTab'],(result)=>{
            chrome.tabs.get(result.docongTab, (tab)=>{
                if(tab.url.includes("j6s003.p.ssafy.io")){
                    chrome.scripting.executeScript({
                        target: {tabId: result.docongTab},
                        func: ()=>{return localStorage["persist:root"];}
                    }, (result)=>{
                        timerStatus = JSON.parse(JSON.parse(result[0].result).user).userTimer;
                        if(timerStatus.status == "play"){
                            timer = true;
                            playTimer(timerStatus);
                        } else {
                            timer = false;
                            chrome.action.setIcon({
                                path:"img/icon16.png"
                            });
                        }
                    });
                }
            })
        })
  • localStorageに格納し、全てのウィンドウが同じ値になるようにする
  • 記憶されているtabidのURLがDocongであればタイマーLogicを実行できる