2020年8月19日 星期三

希望網頁頁面限制在一個瀏覽器內只能在一個分頁中被開啟時 Storage Event 在safari上的Bug

在實作希望網頁頁面限制在一個瀏覽器內只能在一個分頁中被開啟時使用了以下的方法(參考自此
		
// Broadcast that you're opening a page.
  localStorage.openpages = Date.now();
  var onLocalStorageEvent = function(e){
  
      if(e.key == "openpages"){
          // Listen if anybody else is opening the same page!
          localStorage.page_available = Date.now();
      }

      if(e.key == "page_available"){
          alert("您已在其他分頁開啟過此頁面");
          return false;
      }

  };
  
  window.addEventListener('storage', onLocalStorageEvent, false);

以上的方法在chrome、firefox等瀏覽器上皆可正常運作,但是在safari上會有問題,警告會在第一個分頁就跳出
目前有被回報為safari的bug -> Storage events are fired for the same tab 

暫時可解的方法是在function內加上!document.hasFocus(),如下 (參考自此

上述解法還是有問題,目前尚未找到有效解決方式

沒有留言: