簡體   English   中英

存儲事件未在 iOS Safari 中觸發

[英]Storage events not firing in iOS Safari

我在 iOS Safari 中有兩個選項卡,都打開到同一頁面。 兩個選項卡都有一個事件偵聽器,用於 window object 上的存儲事件,並且在客戶端單擊/點擊/類型時都寫入本地存儲。

在 Internet Explorer 中,未與之交互的選項卡接收存儲事件,但不是 Safari(在 Firefox 和 Chromium 瀏覽器上,我為此使用廣播通道 API)。 此外,此代碼之前在 Safari 上進行了測試(恐怕我不記得哪個版本了)並且它有效。

我確保頁面上沒有拋出 JavaScript 錯誤,並且我沒有在隱私瀏覽模式下進行測試。 誰能想到為什么存儲事件會簡單地停止觸發?

起初我認為這是跟蹤預防的一部分(對於試圖通信的第三方頁面上的同一頁面的頁面和 iframe 仍然是這種情況),但現在我認為這實際上是一個Safari 錯誤

如果您需要在 Safari 中進行交叉表通信,請使用 Service Worker。 我首選的交叉表設置,以首選回退到最不首選的回退的順序:

  1. 如果支持,請使用BroadcastChannel ,因為這實際上是他們設計用例。 Safari 或 IE 不支持。
  2. 使用 Service Worker 的消息事件。 這是目前在 Safari 中有效的唯一方法,但是定期喚醒 Service Worker 並不是很好。 請注意,Service Worker 在 Firefox 隱私瀏覽模式下不工作,所以 Firefox 支持 BroadcastChannel 是件好事。
  3. 使用存儲事件。 這是 Internet Explorer 中唯一可用的跨表通信方法,但如果您不需要支持 IE(幸運的是),請不要退縮到這一步。 請注意,這在 Safari 隱私瀏覽模式下不起作用(設置 localStorage 項目會引發錯誤)。 另請注意,有一個 IE localStorage 錯誤,這意味着存儲事件的 newValue 屬性實際上是 oldValue,因此您需要在將 localStorage 設置為觸發兩次后刪除它,第二次具有正確的值。

另請注意,以上都不會讓您在 Safari 中的第一方和第三方上下文之間進行通信。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM