지 어떻게 확인할 수 있습니 브라우저에 차단하는 팝업?

StackOverflow https://stackoverflow.com/questions/2914

  •  08-06-2019
  •  | 
  •  

문제

때때로,가 된 웹 페이지 하려고 창을 열고 새로운 창(사용자 입력,또는 뭔가 중요하다),그러나 팝업 차단을 방지하이에서 일어나고 있다.

어떤 방법을 호출하는 창의 사용을 확인하는 새로운 창작을 제대로?

도움이 되었습니까?

해결책

당신이 사용하는 경우 자바 스크립트를 열기는 팝업에,당신은 다음과 같은 코드를 사용하면 됩니다:

var newWin = window.open(url);             

if(!newWin || newWin.closed || typeof newWin.closed=='undefined') 
{ 
    //POPUP BLOCKED
}

다른 팁

나의 숫자가 위의 예제,수지와 함께 작동하도록 Chrome.이 간단한 방법이와 함께 작동하도록 보인 크롬 39,Firefox34,사파리 5.1.7,IE11.여기에는 코드의에서 우리의 JS 라이브러리입니다.

openPopUp: function(urlToOpen) {
    var popup_window=window.open(urlToOpen,"myWindow","toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes, copyhistory=yes, width=400, height=400");            
    try {
        popup_window.focus();   
    } catch (e) {
        alert("Pop-up Blocker is enabled! Please add this site to your exception list.");
    }
}

업데이트:팝업에서 존재 합니다 정말입니다.초기 생각이 있었을 보여주는 또 다른 내용지 않고 창을 닫.지금과 같은 다른 방법이있다,그렇게 하도록 요청합니다.자바 스크립트를 보낼 수 있는 요청에 대한 서버 팝업는 거의 사용되지 않습니다.하지만 때로는 그들은 여전히 편리합니다.

과거에는 악한 사이트를 학대하는 팝업이 많습니다.나쁜 페이지 열 수 톤의 팝업 윈도우와 광고입니다.그래서 지금 대부분의 브라우저를 차단하려고 팝업을 보호하고 사용자.

대부분의 브라우저는 팝업 차단하면 그들은 외부의 사용자 이벤트 트리거 처리기 같은 onclick.

당신이 그것에 대하여 생각하는 경우,그의 까다로운 방법입니다.는 경우드에서 직접 onclick 처리기는 쉽습니다.그러나 팝업 창에 열립 setTimeout?

이 코드:

 // open after 3 seconds
setTimeout(() => window.open('http://google.com'), 3000);

팝업을 엽 크롬에서만 얻을 차단합니다.

...그리고 이 작품에서는 파이어 폭스 너무:

 // open after 1 seconds
setTimeout(() => window.open('http://google.com'), 1000);

차이는 Firefox 처리 시간 제한 2000ms 또는 더 적은 허용되지만,그 후–을 제거""신뢰,가정하면 지금은"외부에 사용자의 액션"입니다.그래서 첫 번째는 차단되고,두 번째 중 하나하지 않습니다.


원래는 대답했 현재 2012:

이 솔루션을 위한 팝업 차단 검사에서 테스트되었습니다 FF(v11), 사파리(v6),크롬(v23.0.127.95)&IE(v7&v9).업데이트 displayError 를 처리하는 기능의 오류 메시지가 표시됩니다.

var popupBlockerChecker = {
    check: function(popup_window){
        var scope = this;
        if (popup_window) {
            if(/chrome/.test(navigator.userAgent.toLowerCase())){
                setTimeout(function () {
                    scope.is_popup_blocked(scope, popup_window);
                },200);
            }else{
                popup_window.onload = function () {
                    scope.is_popup_blocked(scope, popup_window);
                };
            }
        } else {
            scope.displayError();
        }
    },
    is_popup_blocked: function(scope, popup_window){
        if ((popup_window.innerHeight > 0)==false){ 
            scope.displayError();
        }
    },
    displayError: function(){
       alert("Popup Blocker is enabled! Please add this site to your exception list.");
    }
};

사용법:

var popup = window.open("http://www.google.ca", '_blank');
popupBlockerChecker.check(popup);

희망이 도움이 됩니다!:)

"하나의 솔루션을 것입니다" 작업 브라우저에 관계 없이 회사 또는 버전은 단순히 경고 메시지가 화면에,어딘가에 가까운 컨트롤을 만들 것입니다 팝업 창에는 정중하게 경고하고 사용자는 작업이 필요합 팝업 및를 사용하시기 바랍에 대한 그들의 사이트입니다.

나는 그것을 알지 않는 멋진 또는 아무것도 하지만,그것을 얻을 수 없습니다 간단하고 필요에 대해 5 분 테스트,그 다음에 이동할 수 있는 다른 악몽이다.

사용자가 허용한 팝업 사이트,그것은 또한 동정심 많지 않는 경우 과장 pop-ups.마지막 일을 하고 싶은 귀찮게 당신의 방문자.

이상의 솔루션이지만,하나만으로 올 수 있는 협력 필터들은 모두 무료되었을 이용하여 시간을 확인하는 닫힌 상태의 팝업이 있습니다.

function popup (url, width, height) {
    const left = (window.screen.width / 2) - (width / 2)
    const top = (window.screen.height / 2) - (height / 2)
    let opener = window.open(url, '', `menubar=no, toolbar=no, status=no, resizable=yes, scrollbars=yes, width=${width},height=${height},top=${top},left=${left}`)

    window.setTimeout(() => {
        if (!opener || opener.closed || typeof opener.closed === 'undefined') {
            console.log('Not allowed...') // Do something here.
        }
    }, 1000)
}

이것은 분명히 해킹;다음과 같은 모든 솔루션은 이 문제를 해결합니다.

제공해야 하는 충분한 시간에 당신의 setTimeout 계정에 처음 열고 닫는다,그래서 그것을 철저하게 정확합니다.그것은 수의 위험과 오류가 있습니다.

추가 이것을 너의 목록을 시도합니다.

를 사용하여 onbeforeunload 이벤트가 우리가 확인할 수 있습니다 다음과 같이

    function popup()
    {
        var chk=false;
        var win1=window.open();
        win1.onbeforeunload=()=>{
            var win2=window.open();
            win2.onbeforeunload=()=>{
                chk=true;
            };
        win2.close();
        };
        win1.close();
        return chk;
    }

그것은 2 블랙 윈도우에서 배경

함수가 반환하는 부울 값입니다.

내가 결합@Kevin B@DanielB 의 솔루션입니다.
이것은 훨씬 더 간단합니다.

var isPopupBlockerActivated = function(popupWindow) {
    if (popupWindow) {
        if (/chrome/.test(navigator.userAgent.toLowerCase())) {
            try {
                popupWindow.focus();
            } catch (e) {
                return true;
            }
        } else {
            popupWindow.onload = function() {
                return (popupWindow.innerHeight > 0) === false;
            };
        }
    } else {
        return true;
    }
    return false;
};

사용법:

var popup = window.open('https://www.google.com', '_blank');
if (isPopupBlockerActivated(popup)) {
    // Do what you want.
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top