https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/onInstalled
익스텐션이 처음 설치될 때, 익스텐션이 새 버전으로 업데이트될 때, 브라우저가 새 버전으로 업데이트될 때 실행됩니다. runtime.onInstalled 는 당신의 익스텐션이 설치되면 실행되는 리스너이고 browser.management.onInstalled는 브라우저에 설치되는 모든 익스텐션에 대해 실행되는 리스너입니다.
browser.runtime.onInstalled.addListener(listener) // 실행할 리스너 추가
browser.runtime.onInstalled.removeListener(listener) // 리스너 제거
browser.runtime.onInstalled.hasListener(listener) // 리스너 유무 확인
이벤트 페이지(background)가 unloaded 되기 전 실행되는 리스너입니다.
browser.runtime.onSuspend.addListener(listener)
browser.runtime.onSuspend.removeListener(listener)
browser.runtime.onSuspend.hasListener(listener)
Firefox와 Safari에서 지원하지 않습니다.
https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Background_scripts
persistent 모드와 non-persistent 모드가 있는데, persistent 모드는 extension이 사용 불가(disabled) 해지거나 삭제(uninstalled) 될 때까지 실행되는 모드이고 non-persistent 모드는 이벤트에 응답할 때만 load 되고 idle 상태(일종의...sleep 모드?)가 될 때 unload 됩니다. background 스크립트의 경우 모든 visible view와 메세지 포트가 닫힐 때까지 unload 되지 않습니다. view를 연다고 background의 load를 유발하지 않지만 view가 열려있는한 background의 unload를 방지합니다.
Manifest V3 부터 non-persistent background 스크립트만 지원한다고 합니다.
익스텐션이 설치되면 runtime.onInstalled에 등록된 리스너가 실행됩니다.
background(서비스워커)는 메세지 포트가 연결되어 있거나 특정 이벤트가 들어오지 않는 한 load 되지 않습니다. 즉, 데이터가 유지되지 않습니다.(non-persistent)
extension view(popup)가 열려있는 동안은 background의 데이터가 유지됨을 보장합니다.
따라서 background가 주기적으로 재실행되니, unload 될 때 데이터를 storage나 indexedDB 등에 저장하고 load 될 때 데이터를 불러오는 식으로 동작해야합니다.
runtime.onSuspend를 통해 background의 unload 시 수행할 리스너를 등록할 수 있습니다. 여기에 indexedDB 등에 저장하는 로직을 추가하면 될 듯 합니다.