fix offline cache failed #7
@@ -1,19 +1,27 @@
|
||||
let ip = null;
|
||||
$.getJSON("https://api.ipify.org?format=json", function(data) {
|
||||
ip = data.ip;
|
||||
})
|
||||
fetch("https://api.ipify.org?format=json").then(response => {
|
||||
if (response.ok) {
|
||||
return response.json();
|
||||
}
|
||||
|
||||
throw new Error("Network response was not ok.");
|
||||
}).then(res => {
|
||||
ip = res.ip;
|
||||
|
||||
}).catch(err => {
|
||||
if ('caches' in window) {
|
||||
caches.match('https://api.ipify.org?format=json').then(response => {
|
||||
if (response) {
|
||||
return response.json();
|
||||
}
|
||||
}).then(data => {
|
||||
if (ip === null && data !== undefined) {
|
||||
ip = JSON.parse(data).ip;
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
if ('caches' in window) {
|
||||
caches.match('https://api.ipify.org?format=json').then(response => {
|
||||
if (response) {
|
||||
return response.json();
|
||||
}
|
||||
}).then(data => {
|
||||
if (ip === null) {
|
||||
ip = JSON.parse(data).ip;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
let goodFortunes = [];
|
||||
let badFortunes = [];
|
||||
|
||||
@@ -2,28 +2,28 @@ let pre_cache_file_version = 'pre-v1.0.0';
|
||||
let auto_cache_file_version = 'auto-v1.0.0'
|
||||
|
||||
const ASSETS = [
|
||||
'generators/images/lifeadventurer-192x192.png',
|
||||
'generators/images/lifeadventurer-512x512.png',
|
||||
'generators/images/lifeadventurer-180x180.png',
|
||||
'generators/images/lifeadventurer-270x270.png',
|
||||
'generators/images/lifeadventurer.jpg',
|
||||
'/generators/images/lifeadventurer-192x192.png',
|
||||
'/generators/images/lifeadventurer-512x512.png',
|
||||
'/generators/images/lifeadventurer-180x180.png',
|
||||
'/generators/images/lifeadventurer-270x270.png',
|
||||
'/generators/images/lifeadventurer.jpg',
|
||||
|
||||
'https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css',
|
||||
'https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js'
|
||||
];
|
||||
|
||||
const NEED_UPDATE = [
|
||||
'generators/fortune_generator/styles.css',
|
||||
'generators/fortune_generator/fortune.js',
|
||||
'generators/fortune_generator/matrix.js',
|
||||
'generators/fortune_generator/special.json',
|
||||
'generators/fortune_generator/fortune.json',
|
||||
'/generators/fortune_generator/',
|
||||
'/generators/fortune_generator/index.html',
|
||||
'/generators/fortune_generator/styles.css',
|
||||
'/generators/fortune_generator/fortune.js',
|
||||
'/generators/fortune_generator/matrix.js',
|
||||
'/generators/fortune_generator/special.json',
|
||||
'/generators/fortune_generator/fortune.json',
|
||||
'/generators/fortune_generator/manifest.json',
|
||||
'https://api.ipify.org/?format=json',
|
||||
]
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
|
||||
let limit_cache_size = (name, size) => {
|
||||
caches.open(name).then(cache => {
|
||||
cache.keys().then(key => {
|
||||
@@ -34,28 +34,27 @@ let limit_cache_size = (name, size) => {
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
let is_in_array = (str, array) => {
|
||||
let path = '';
|
||||
|
||||
// Check domain of request is same of current domain.
|
||||
// Check the request's domain is the same as the current domain.
|
||||
if (str.indexOf(self.origin) === 0) {
|
||||
path = str.substring(self.origin.length); // Remove https://lifeadventurer.github.io
|
||||
} else {
|
||||
path = str; // outside request
|
||||
}
|
||||
|
||||
return array.indexOf(array) > -1;
|
||||
return array.indexOf(path) > -1;
|
||||
}
|
||||
|
||||
// install
|
||||
self.addEventListener('install', event => {
|
||||
self.skipWaiting();
|
||||
|
||||
// pre cache files
|
||||
//pre-cache files
|
||||
event.waitUntil(
|
||||
caches.open(pre_cache_file_version).then(cache => {
|
||||
cache.addAll(ASSETS);
|
||||
// cache.addAll(ASSETS);
|
||||
})
|
||||
);
|
||||
});
|
||||
@@ -76,31 +75,26 @@ self.addEventListener('activate', event => {
|
||||
// fetch event
|
||||
self.addEventListener('fetch', event => {
|
||||
if (is_in_array(event.request.url, ASSETS)) {
|
||||
// Cache only strategy
|
||||
// cache only strategy
|
||||
|
||||
event.respondWith(
|
||||
caches.match(event.request)
|
||||
caches.match(event.request.url)
|
||||
);
|
||||
} else if (is_in_array(event.request.url, NEED_UPDATE)) {
|
||||
// Cache then network strategy
|
||||
|
||||
event.respondWith(
|
||||
caches.open(auto_cache_file_version).then(async cache => {
|
||||
const res = await fetch(event.request);
|
||||
cache.put(event.request, res.clone());
|
||||
fetch(event.request.url).then(async response => {
|
||||
if (response.ok) {
|
||||
const cache = await caches.open(auto_cache_file_version);
|
||||
cache.put(event.request.url, response.clone());
|
||||
return response;
|
||||
}
|
||||
|
||||
return res;
|
||||
throw new Error("Network response was not ok.");
|
||||
|
||||
}).catch(async error => {
|
||||
const cache = await caches.open(auto_cache_file_version);
|
||||
return cache.match(event.request.url);
|
||||
})
|
||||
);
|
||||
} else if (event.request.url.indexOf('https://api.ipify.org?format=json') > -1) {
|
||||
fetch(event.request).then(async response => {
|
||||
const cache = await caches.open(auto_cache_file_version);
|
||||
cache.put(event.request.url, response.clone());
|
||||
return response;
|
||||
|
||||
}).catch(async () => {
|
||||
const cache = await caches.open(auto_cache_file_version);
|
||||
return await cache.match(event.request);
|
||||
});
|
||||
)
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user