原子
試著用 service worker 碰到一個現象。

首先在原始頁面註冊一個其子路徑的 sw (這樣原始頁面不會受到 sw 的影響),然後嵌入一個該領域路徑下的 iframe 觸發 sw 的 activate 來 claim 頁面。

預想情況是, iframe 的內容會受 sw 影響,而原始頁面能夠經由 iframe 的 navigator.serviceWorker.controller 與 sw 通訊。

實際結果 iframe 的確有被 claim ,內容也受到 sw 的控制, sw 的 claim 清單裡也有這個項目,但是 navigator.serviceWorker.controller 仍舊是 null 。

據說 iframe 會繼承原始頁面的 controller ,是因為這個原因嗎?
原子
無法取得 sw 的 global scope 的話,就不能用 postmessage 通訊了
在原始頁面 fetch 領域路徑下的資源是不會觸發 sw 的,因為原始頁面不在領域內
原子
另外在觸發 active 的當下,執行 await clients.claim 後用 await clients.matchAll 讀到的清單是空的,這點還不太懂原因。
原子
似乎是因為 active 的當下,請求的視窗還不存在的關係..?
原子
activate event 看起來沒有傳遞可以讀取觸發 window 的資訊
原子
很奇妙的,在我的開發環境下 activate 時 await clients.claim 之後用 setTimeout 等大概 10ms 就能讀到觸發 activate 的 client 頁面了
載入新的回覆