'팝업차단'에 해당되는 글 1건

  1. 2010.05.07 팝업 차단 alert 띄우기.

팝업 차단 alert 띄우기.

ITWeb/개발일반 2010. 5. 7. 20:31
내용에 오류가 있어서 수정 합니다.
크롬이 좀 문제가 있더군요.
크롬의 경우 팝업창을 차단 하기는 하지만 내부적으로 차단된 팝업창이 모두 로딩 된 상태로 유지 되기 때문에 모든 요소에 접근이 가능 하더군요.
왜 이렇게 만들었는지 짧은 생각으로는 사실 좀 이해가 안가긴 합니다.

var objWin = window.open(URL, WINDOWNAME, OPTIONS);
 
 if ( navigator.userAgent.indexOf("Chrome") > -1 ) {
   // chrome 의 경우 최초 한번은 감지가 가능 하나 두번째 부터는 이미 팝업창이 로딩된 상태이기 때문에 감지가 안됩니다.
 } else {
  // FF, IE, Safari, Opera 감지 가능
  if( typeof(win) == "undefined" || win == null || typeof(win.name) == "undefined"){
   alert("팝업 차단됨");
  }
 }

Chrome 의 경우 팝업차단 감지를 완벽하게 하는 방법을 아시는 분은 정보 공유 좀 부탁 드려요.. ^^;

Tip.
팝업차단은 사용자에 의한 1차 클릭과 액션에 의한건 모두 허용 됩니다.
다만 사용자의 1차 액션이후에 자동으로 발생 하게 되는 액션에 대해서는 모두 차단 됩니다.
역시 사용자의 액션이 아닌 자동으로 발생 하게 되는 액션에 대해서도 모두 차단 됩니다.

 



window.open 을 사용 하다 보면.. popup block 으로 정상적인 실행이 안될 때가 있죠..
이런 경우 popup block 에 예외 항목 등록을 해 달라는 alert 을 띄워 주면 단편적인 방법으로는 해결을 할 수 있을 듯 합니다.

각 브라우저 별로 popup block 방법이 좀 다릅니다.
아래 조건절 순서에 맞게 등록 하시면 거의 대부분 브라우저에서 alert 메시지를 띄울 수 있습니다.

테스트 브라우저 : IE, FF, CHROME, SAFARI, OPERA

var objWin = window.open(URL, WINDOWNAME, OPTIONS);

if ( typeof(objWin) == "undefined" ||
    objWin == null ||
    typeof(objWin.name) == "undefined" ||
    typeof(objWin.document.READATTR) == "undefined" ) {
    alert("팝업이 차단 되었습니다. \n ABCD.COM을 등록해 주세요.");
}

여기서 typeof(objWin.document.READATTR) 이 부분은 chrome 때문에 들어간 부분 입니다.
실제 chrome 에서는 objWin 이 object로, objWin.name 이 string 으로 objWin.document 가 object 로 return 해줍니다.
즉 window 객체는 가지고 있으나 실제 페이지 로딩은 되지 않았기 때문에 해당 페이지내 elements 나 attributes 를 read 하면 undefined 로 떨어집니다.
꼭 이렇게 해야 하는건 아니지만 이런 식으로 하면 된다 정도로 이해 하시면 될 것 같내요.. ㅎㅎ

위 코드는 팝업차단이 설정된 경우에만 테스트 된 코드 입니다.
팝업 차단이 해제된 경우에는 아직 테스트를 못한 코드이니 ㅎㅎ 감안하셔서 보세요.
: