press-plus
Version:
85 lines (69 loc) • 1.84 kB
text/typescript
// #ifdef H5
import axios from 'axios';
// #endif
import { RAINBOW_LINK } from './config';
export function checkUseServiceWorker(key: string, getFrontConfig?: Function) {
let promise;
// #ifdef H5
promise = new Promise((resolve, reject) => {
let func = () => axios.get(`${RAINBOW_LINK}?t=${Date.now()}`);
if (typeof getFrontConfig === 'function') {
func = () => getFrontConfig('service_worker_config', 'service_worker_config');
}
func().then((res: any) => {
const result = res?.[key] || res.data?.[key];
if (process.env.NODE_ENV === 'development') {
reject();
return;
}
if (result === 'open') {
resolve(1);
return;
}
reject();
})
.catch(() => {
reject();
});
});
// #endif
// #ifndef H5
promise = Promise.reject();
// #endif
return promise;
}
export function registerServiceWorker(key: string, getFrontConfig?: Function) {
// #ifdef H5
if ('serviceWorker' in navigator) {
checkUseServiceWorker(key, getFrontConfig)
.then(() => {
register(key);
})
.catch(() => {
unregister();
});
} else {
console.log('[Service Worker] 不支持');
}
// #endif
}
function register(key: string) {
window.addEventListener('load', () => {
navigator.serviceWorker
.register(`./service-worker-${key}.js`)
.then((registration) => {
console.log('[Service Worker] 注册成功:', registration);
})
.catch((error) => {
console.log('[Service Worker] 注册失败:', error);
});
});
}
function unregister() {
console.log('[Service Worker] unregister');
navigator.serviceWorker.getRegistrations().then((registrations) => {
registrations.forEach((sw) => {
sw.unregister();
});
});
}