2013-05-14 4 views
15

Я искал много вопрос в переполнение стека и может быть дубликатом здесь Detect PopupКак обнаружить блокировщик всплывающих окон в Chrome?

Но not helped for me во время тестирования в Chrome (проверено v26.0.1410.64)
После подхода Worked in IE and Firefox но not in Chrome

var popup = window.open(winPath,winName,winFeature,true); 
if (!popup || popup.closed || typeof popup.closed=='undefined'){ 
     //Worked For IE and Firefox 
     alert("Popup Blocker is enabled! Please add this site to your exception list."); 
     window.location.href = 'warning.html'; 
} else { 
     //Popup Allowed 
     window.open('','_self'); 
     window.close(); 
} 

Любое лучшее решение, которое работает для Chrome также?

+1

Почему нисходящий избиратель ... в чем проблема? Я не могу понять –

+3

Некоторые люди считают, что взломать поведение браузера - плохая практика. Лично я считаю это полезным. – BradGreens

ответ

19

Наконец, успех, Комбен ING другой ответ от члена StackOverflow в
Этот код работает для меня & испытания в IE, Chrome & Firefox

var popup = window.open(winPath,winName,winFeature,true); 
setTimeout(function() { 
    if(!popup || popup.outerHeight === 0) { 
     //First Checking Condition Works For IE & Firefox 
     //Second Checking Condition Works For Chrome 
     alert("Popup Blocker is enabled! Please add this site to your exception list."); 
     window.location.href = 'warning.html'; 
    } else { 
     //Popup Blocker Is Disabled 
     window.open('','_self'); 
     window.close(); 
    } 
}, 25); 
+1

спасибо, что это работает :) – ranggadablues

+1

Если кто-то сталкивается с этим, и ваше всплывающее обнаружение не работает, убедитесь, что вы не прикрепляете его к доверенному событию: http: // www .w3.org/TR/DOM-Level-3-Events/# trusted-events –

+0

отлично работает без предложения else, в firefox предложение else фактически запускает пустую вкладку. –

2

Попробуйте ниже .. !!

var pop = window.open("about:blank", "new_window_123", "height=150,width=150"); 

// Detect pop blocker 
setTimeout(function() { 
if(!pop || pop.closed || pop.closed == "undefined" || pop == "undefined" || parseInt(pop.innerWidth) == 0 || pop.document.documentElement.clientWidth != 150 || pop.document.documentElement.clientHeight != 150){ 
pop && pop.close(); 
alert("Popups must be enabled."); 
}else{ 
alert("Popups is enabled."); 
pop && pop.close(); 
}}, 1000); 

Посмотрите на вопрос ниже

Detect blocked popup in Chrome

How do I detect whether popups are blocked in chrome

на Google Это более поможет вам ..

https://www.google.com/search?q=how+to+detect+a+blocked+popup+in+chrome

+1

+1 для второй ссылки, это помогло мне –

0

Я знаю, что это «решен», но этот простой код работал для меня обнаружения «Better блокировщика всплывающих окон» расширение в Chrome:

if (!window.print) { 
    //display message to disable popup blocker 
    } else { 
    window.print(); 
    } 
} 

Бритва Ockham! Или я что-то упускаю, и это не может быть так просто?

0

Я использовал этот метод для открытия окон из js и не был заблокирован Chrome. http://en.nisi.ro/blog/development/javascript/open-new-window-window-open-seen-chrome-popup/

+1

Ответ с помощью только исходящих ссылок не рекомендуется. Пожалуйста, напишите минимальный смысл относительно того, что находится в ссылке. –

+0

Я бы не стал слишком беспокоиться, метод на связанной странице не работает вообще - как только вы установите переменную myPopup, Chrome блокирует ее! – MC9000

2

Я нашел, что это гораздо более эффективно использовать примерочных улов следующим образом:

var popup = window.open(winPath,winName,winFeature,true); 
try { 
    popup.focus(); 
} catch (e) { 
    alert('popup blocked!'); 
} 
0

Ниже код работает в Chrome, Safari и Firefox. Я использовал jquery для этого.

var popupWindow = window.open("http://www.google.com","directories=no,height=100,width=100"); 

$(document).ready(function(e) { 
    detectPopup(); 
    function detectPopup() { 
    if(!popupWindow) { 
     alert("popup will be blocked"); 

    } else { 
     alert("popup will be shown"); 
     window.open('','_self'); 
     window.close(); 
    } 
} 
});