Baseline Widely available
å®å ¨ãªã³ã³ããã¹ãç¨: ãã®æ©è½ã¯ä¸é¨ã¾ãã¯ãã¹ã¦ã®å¯¾å¿ãã¦ãããã©ã¦ã¶ã¼ã«ããã¦ãå®å ¨ãªã³ã³ããã¹ã (HTTPS) ã§ã®ã¿å©ç¨ã§ãã¾ãã
ã¡ã¢: ãã®æ©è½ã¯ãµã¼ãã¹ã¯ã¼ã«ã¼å ã§ã®ã¿å©ç¨å¯è½ã§ãã
fetch
㯠ServiceWorkerGlobalScope
ã¤ã³ã¿ã¼ãã§ã¤ã¹ã®ã¤ãã³ãã§ãã¡ã¤ã³ã¢ããªã¹ã¬ããããããã¯ã¼ã¯ãªã¯ã¨ã¹ããçºè¡ããã¨ãã«ããµã¼ãã¹ã¯ã¼ã«ã¼ã®ã°ãã¼ãã«ã¹ã³ã¼ãã§çºçãã¾ããããã«ããããµã¼ãã¹ã¯ã¼ã«ã¼ããããã¯ã¼ã¯ãªã¯ã¨ã¹ããååããç¬èªã®ã¬ã¹ãã³ã¹ï¼ä¾ãã°ããã¼ã«ã«ãã£ãã·ã¥ããã®ã¬ã¹ãã³ã¹ï¼ãéä¿¡ã§ããããã«ãªãã¾ãã
ãã®ã¤ãã³ãã¯ãã£ã³ã»ã«ä¸å¯ã§ããããªã³ã°ãã¾ããã
æ§æãã®ã¤ãã³ãåã addEventListener()
çã®ã¡ã½ããã§ä½¿ç¨ããããã¤ãã³ããã³ãã©ã¼ããããã£ãè¨å®ããããã¦ãã ããã
addEventListener("fetch", (event) => {});
onfetch = (event) => {};
解説
ãã® fetch
ã¤ãã³ãã¯ãã¡ã¤ã³ã¹ã¬ããããããã¯ã¼ã¯ãªã¯ã¨ã¹ããè¡ãéã«ããµã¼ãã¹ã¯ã¼ã«ã¼ã®ã°ãã¼ãã«ã¹ã³ã¼ãã§çºçãã¾ããããã¯ã¡ã¤ã³ã¹ã¬ããããã®æç¤ºç㪠fetch()
å¼ã³åºãã ãã§ã¯ãªãããã¼ã¸ããã²ã¼ã·ã§ã³ã JavaScriptãCSSãç»åãªã©ã®ãªã½ã¼ã¹ã®åå¾ã«ããæé»çãªãªã¯ã¨ã¹ãã§ãçºçãã¾ãã
ã¤ãã³ããã³ãã©ã¼ã¯ FetchEvent
ãªãã¸ã§ã¯ããåãåããRequest
ã¤ã³ã¹ã¿ã³ã¹ãéãã¦ãªã¯ã¨ã¹ãã«ã¢ã¯ã»ã¹ã§ãã¾ãã
FetchEvent
ã¯ãã©ã¡ã¼ã¿ã¼ã« Response
ãã¾ã㯠Response
ã§è§£æ±ºãã Promise
ãåãåã respondWith()
ã¡ã½ãããæã£ã¦ãã¾ããããã«ããããµã¼ãã¹ã¯ã¼ã«ã¼ã®ã¤ãã³ããã³ãã©ã¼ã¯ã¡ã¤ã³ã¹ã¬ããã§ãªã¯ã¨ã¹ãã«è¿ãããã¬ã¹ãã³ã¹ãå·®ãæ¿ãããã¨ãã§ãã¾ãã
ä¾ãã°ãµã¼ãã¹ã¯ã¼ã«ã¼ã¯ä»¥ä¸ã®ãããªå¤ã¸å·®ãæ¿ãããã¨ãã§ãã¾ãã
Cache
ã¤ã³ã¿ã¼ãã§ã¤ã¹ããåå¾ããã¬ã¹ãã³ã¹ã®ãã¼ã«ã«ãã£ãã·ã¥Response.json()
ã Response()
ã³ã³ã¹ãã©ã¯ã¿ã¼ãªã©ã®ã¡ã½ããã§ãµã¼ãã¹ã¯ã¼ã«ã¼ãåæããã¬ã¹ãã³ã¹ãResponse.error()
ã«ãã ãããã¯ã¼ã¯ã¨ã©ã¼ããã㯠fetch()
å¼ã³åºããæå¦ããã¾ããrespondWith()
ã¡ã½ããã¯ãä¸ã¤ã®ãªã¯ã¨ã¹ãã«å¯¾ãã¦ä¸åº¦ã ãå¼ã³åºããã¨ãã§ãã¾ããè¤æ°ã® fetch
ã¤ãã³ããªã¹ãã¼ãè¨å®ãããå ´åãrespondWith()
ãå¼ã³åºãããã¾ã§ãç»é²ãããé ã«å¼ã³åºããã¾ãã
respondWith()
ã¡ã½ããã¯åæçã«å¼ã³åºãå¿
è¦ãããã¾ããã¤ã¾ã then
ãã³ãã©ã¼ããå¼ã³åºããã¨ã¯ã§ãã¾ããã
é常ãfetch
ã¤ãã³ããã³ãã©ã¼ã¯ URL ãªã©ã®ãªã¯ã¨ã¹ãç¹å¾´ã«å¿ãã¦ç°ãªãæ¦ç¥ãã¨ãã¾ãã
function strategy1() {
return fetch("picnic.jpg");
}
function strategy2() {
return Response.error();
}
const pattern1 = /^\/salamander/;
const pattern2 = /^\/lizard/;
self.addEventListener("fetch", (event) => {
const url = new URL(event.request.url);
if (pattern1.test(url.pathname)) {
event.respondWith(strategy1());
} else if (pattern2.test(url.pathname)) {
event.respondWith(strategy2());
}
});
ãã³ãã©ã¼å
ã§ respondWith()
ãå¼ã³åºãããªãã£ãå ´åãã¦ã¼ã¶ã¼ã¨ã¼ã¸ã§ã³ãã¯èªåçã«å
ã®ãããã¯ã¼ã¯ãªã¯ã¨ã¹ããè¡ãã¾ããä¾ãã°ä¸è¨ã®ã³ã¼ãã§ã¯ pattern1
ã¾ã㯠pattern2
ã«ãããããªããªã¯ã¨ã¹ãã¯ãã¹ã¦ããµã¼ãã¹ã¯ã¼ã«ã¼ãåå¨ããªãã£ããã®ããã«æ¯ãèãã¾ãã
FetchEvent
ã§ãã
ãã® fetch
ã¤ãã³ããã³ãã©ã¼ã¯ãã¾ããã£ãã·ã¥æ¸ã¿ã®ã¬ã¹ãã³ã¹ãæ¢ãã¾ããã¬ã¹ãã³ã¹ãè¦ã¤ãã£ãå ´åã¯ãã£ãã·ã¥æ¸ã¿ã®ã¬ã¹ãã³ã¹ãè¿ãã¾ããããã§ãªãå ´åã¯ãããã¯ã¼ã¯ãããªã½ã¼ã¹ãåå¾ãããã¨ãã¾ãã
async function cacheThenNetwork(request) {
const cachedResponse = await caches.match(request);
if (cachedResponse) {
console.log("Found response in cache:", cachedResponse);
return cachedResponse;
}
console.log("Falling back to network");
return fetch(request);
}
self.addEventListener("fetch", (event) => {
console.log(`Handling fetch event for ${event.request.url}`);
event.respondWith(cacheThenNetwork(event.request));
});
ãã£ãã·ã¥ã®ã¿
ãã® fetch
ã¤ãã³ããã³ãã©ã¼ã¯ãã¹ã¯ãªããã¨ã¹ã¿ã¤ã«ã·ã¼ãã«å¯¾ãã¦ããã£ãã·ã¥ã®ã¿ãããªã·ã¼ãå®è£
ãã¾ãããªã¯ã¨ã¹ãã® destination
ã "script"
ã¾ã㯠"style"
ã§ããå ´åããã³ãã©ã¼ã¯ãã£ãã·ã¥ã ããæ¢ããã¬ã¹ãã³ã¹ãè¦ã¤ãããªãå ´åã¯ã¨ã©ã¼ãè¿ãã¾ãããã®ä»ã®ãªã¯ã¨ã¹ãã¯ãã¹ã¦ãããã¯ã¼ã¯ãéãã¦è¡ããã¾ãã
async function cacheOnly(request) {
const cachedResponse = await caches.match(request);
if (cachedResponse) {
console.log("Found response in cache:", cachedResponse);
return cachedResponse;
}
return Response.error();
}
self.addEventListener("fetch", (event) => {
if (
event.request.destination === "script" ||
event.request.destination === "style"
) {
event.respondWith(cacheOnly(event.request));
}
});
仿§æ¸ ãã©ã¦ã¶ã¼ã®äºææ§ é¢é£æ
å ±
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4