You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

serviceworker.js 1.1KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. const {UseServiceWorker, AppSubUrl, AppVer} = window.config;
  2. const cacheName = 'static-cache-v2';
  3. async function unregister() {
  4. for (const registration of await navigator.serviceWorker.getRegistrations()) {
  5. const serviceWorker = registration.active;
  6. if (!serviceWorker) continue;
  7. registration.unregister();
  8. }
  9. }
  10. async function invalidateCache() {
  11. await caches.delete(cacheName);
  12. }
  13. async function checkCacheValidity() {
  14. const cacheKey = AppVer;
  15. const storedCacheKey = localStorage.getItem('staticCacheKey');
  16. // invalidate cache if it belongs to a different gitea version
  17. if (cacheKey && storedCacheKey !== cacheKey) {
  18. invalidateCache();
  19. localStorage.setItem('staticCacheKey', cacheKey);
  20. }
  21. }
  22. export default async function initServiceWorker() {
  23. if (!('serviceWorker' in navigator)) return;
  24. if (UseServiceWorker) {
  25. await checkCacheValidity();
  26. try {
  27. await navigator.serviceWorker.register(`${AppSubUrl}/serviceworker.js`);
  28. } catch (err) {
  29. console.error(err);
  30. await invalidateCache();
  31. await unregister();
  32. }
  33. } else {
  34. await invalidateCache();
  35. await unregister();
  36. }
  37. }