2013-02-06 1 views
0

Chrome 및 Opera와 관련된 문제가있어서 수정 방법을 찾지 못하는 것 같습니다. javascript가있는 팝업 차단기 감지기가 있는데 차단기가 활성화되어 있으면 div에 "이 사이트의 팝업을 활성화하십시오"라는 메시지가 인쇄됩니다. FF, Safari 및 IE에서는 훌륭하게 작동하지만 Chrome 및 Opera에서는 작동하지 않습니다. 그 두 브라우저에서 나는 div가 내부에 텍스트가 나타나지 않고 붕괴되도록합니다. 누구든지이 문제를 해결하고 무슨 일이 일어나고 있는지 알고 있습니까? 고맙습니다!자바와 함께 Chrome 및 Opera에서 div에 텍스트를 추가하지 않았습니다.

JS

function detectPopupBlocker() { 
    var alertDiv = document.getElementById('popupAlert'); 
    console.log(alertDiv); // This prints to the console in Chrome and Opera 
    var popupTest = window.open("about:blank","","directories=no,height=100,width=100,menubar=no,resizable=no,scrollbars=no,status=no,titlebar=no,top=0,location=no"); 
    if (!popupTest) { 
     alertDiv.innerHTML += 'Your popup blocker is detected.<br />Please enable popups for this site.'; 
    } else { 
     popupTest.close(); 
    } 
} 
window.onload = detectPopupBlocker; 
+0

Chrome 개발자 도구에서 자바 스크립트 오류가 발생하고 있습니까? alertDiv.innerHtml이 정의되지 않았을 때 아마도 작동 중입니다. – user1573618

+0

아니요, dev 도구에서 오류가 발생하지 않습니다 – tjoenz

+0

잠깐, 뭐야 ??? 'alertDiv.innerHTML'을 자신과 동일하게 설정하는 이유는 무엇입니까? 왜 그냥'alertDiv.innerHTML = '당신의 텍스트 here''하지 않습니까 ??? – Ryan

답변

0

팝업이 차단 된 경우에도 Opera와 Chrome은 window.open()에서 객체를 반환하므로 이러한 브라우저에서는 실행이 곧바로 else으로 실행됩니다. 즉, Chrome이나 Opera에서 팝업 차단기가 켜져 있으면 현재 코드로 감지 할 수 없습니다.

그러나 popupTest에 알려진 요소가 있는지 검색 할 수 있습니다.이 경우 about:blank 대신 실제 파일을 팝업에로드해야합니다.

var isPopup = false, 
    popupTest = window.open(...); 
try { 
    if (popupTest.document.getElementById('a_known_id')) { 
     isPopup = true; 
    } 
} catch (err) {isPopup = false;} 
if (isPopup) {...} 
1

있습니다 (또는이었다) window.open을 만들기위한 두 가지 좋은 이유() 팝업 차단기가 활성화 된 경우 가짜 창 개체를 반환 :

  1. 일부 사이트를/apps는 팝업 차단을 감지하여 사용자가 차단기를 사용 중지하고 광고 및 기타 악용 사례를 견뎌 낼 수 있습니다.

  2. Bac k 우리가 팝업 차단을 구현할 때 반환 객체가 없으면 중단 될 스크립트를 자주 보았습니다. 나는. 그들은 win.closed를 확인하고 싶었지만 'win'은 undefined로 설정되었습니다.

일부 브라우저는 팝업 차단을 다르게 구현하므로이 기능은 더 이상 필요하지 않습니다.

관련 문제