Mac Safari에서 popstate 이벤트 문제

최근 작업 중인 사이트에 History객체의 .pushState() 메서드와 .replaceState() 메서드를 이용해서 ajax에 대한 URL history 처리를 해 두었는데, QA를 진행 하던 중 Mac Safari에서 window.onpopstate 이슈가 발생했다.

원인을 찾아가 보니 결국 popupstate 이벤트가 발생되는 시점의 문제였는데, 다른 브라우저들은 문제가 없는 반면 Mac Safari에서는 이 이벤트가 페이지 로드와 동시에 발생되는 문제가 발생한 것…

해결

임시 방편일지 이렇게 하는 것이 최선책일지는 확신이 되지는 않으나, 일단 Mac Safari일 경우에 한하여 이벤트 바인딩 시점을 지연시키는 방식으로 해결을 해 두었다.

(function(ua){
  ua = ua ​|| navigator.userAgent;
  ua = ua.toLowerCase();
  if( /safari/.test(ua) && !!window.chrome ){
    // not safari
    window.onpopstate = function(event){
      event = event || window.event;};
  }else{
    // if safari
    setTimeout(function(){
      window.onpopstate = function(eve​nt){};
    }, 500);
  }
})(navigator.userAgent);

현재로서는 일단 아무런 문제 없이 잘 적용이 되어 있는 것으로 보인다.

작성자

멀더끙

접근성에 관심이 많은 Front-End Developer, 커피 애호가, 사진 찍기 좋아하는 여행 러버, 아직도 블로그 뭘 쓸지 모르겠는 초보 블로거, 그냥 이것 저것 개인의 생각을 끄적끄적이는 멀더끙의 블로그입니다.

댓글