[ServiceWorker] ブラウザのjsからServiceWorkerに値を渡す
[ServiceWorker] ブラウザのjsからServiceWorkerに値を渡す:
fetchイベントをlistenしてfetchしてあれしてこれして
DefferedとかPromiseとかなんですかそれ?ってところから調べたので、むしろそっち方面の理解に時間がかかったかも。
理解すると非常に便利なのだろうなということは、理解できたかなぁというところ (´・ω・`)
躓いたのは、
使わずにresponseをreturnしてたら、リクエストが二重になりやがんの。
なるほどわからん。
あとは、Promiseたちの取り回しがわかってきたら、なんとなくでけた (* ´ω` *)
「responseはストリームだから一回しか読めませんよ~」っていう説明もよくわからんけど、確かに読めないから、レスポンスの何かを使って何か処理をしたいなら
jQueryでajaxを使って来てるけど、Fetch APIもおもしろいなぁ。
最近興味津々でござる (´・ω・`)
前提
- hoge.phpにリクエストを投げる。
- そのレスポンスにあるfugaというデータをServiceWorkerの中で使いたい。
ソース
fetchイベントをlistenしてfetchしてあれしてこれしてevent.respondWith()
(´・ω・`)ドーンDefferedとかPromiseとかなんですかそれ?ってところから調べたので、むしろそっち方面の理解に時間がかかったかも。
理解すると非常に便利なのだろうなということは、理解できたかなぁというところ (´・ω・`)
service_worker.js
self.addEventListener('fetch', event => { var requestURL = new URL(event.request.url); if(requestURL.pathname.match("/hoge.php")) { console.log(requestURL.pathname); event.respondWith( fetch(event.request) .then(response => { var res_clone = response.clone(); res_clone.json() .then(json => { if (json.data.fuga) { console.log(fuga); } }); return response; }) ); } });
event.respondWith()
かなぁ。使わずにresponseをreturnしてたら、リクエストが二重になりやがんの。
event.respondWith()
を使うことで、「これをレスポンスとします」ってことになるようで。なるほどわからん。
あとは、Promiseたちの取り回しがわかってきたら、なんとなくでけた (* ´ω` *)
「responseはストリームだから一回しか読めませんよ~」っていう説明もよくわからんけど、確かに読めないから、レスポンスの何かを使って何か処理をしたいなら
clone()
で複製すべし。jQueryでajaxを使って来てるけど、Fetch APIもおもしろいなぁ。
最近興味津々でござる (´・ω・`)
コメント
コメントを投稿