ventanas ventana validar permitir habilitar evitar emergentes emergente ejemplo bloqueo javascript google-chrome window v8 popup-blocker

javascript - validar - API de bloqueador de ventanas emergentes: cómo comprobar si el usuario la tiene habilitada



validar ventanas emergentes javascript (5)

Bueno, esta es su pregunta: necesito una solución estable sobre cómo saber cuándo el usuario hace clic en el evento que abre la ventana, cómo saber si tiene habilitado el bloqueador de elementos emergentes . antes de que la ventana esté abierta ... gracias!

Me temo que no hay ningún método para manejar eso. Investigué sobre este mismo problema hace un tiempo y estoy compartiendo lo que encontré.

¿Por qué nuestras ventanas emergentes están bloqueadas?

Los bloqueadores de ventanas emergentes inteligentes permitirán una ventana emergente si está directamente asociada a la acción de un usuario. Si se retrasa de todos modos, es muy probable que se bloquee.

Referencia: Andy Stratton (su blog)

Me gusta mas esta explicacion

La regla general es que los bloqueadores de ventanas emergentes se activarán si se invoca window.open o similar desde javascript que no es invocado por la acción directa del usuario. Es decir, puede llamar a window.open en respuesta a un clic del botón sin ser golpeado por el bloqueador de ventanas emergentes, pero si coloca el mismo código en un evento de temporizador, se bloqueará. La profundidad de la cadena de llamadas también es un factor: algunos navegadores más antiguos solo miran a la persona que llama de inmediato, los navegadores más nuevos pueden retroceder un poco para ver si la persona que llamó fue un clic del mouse, etc.

Referencia: dthorpe (Nombre de usuario de desbordamiento de pila)

¿Lo que podemos hacer?

Una cosa está muy clara a partir de ahora que no hay ninguna forma directa de modificar con los bloqueadores de elementos emergentes del código. Creo que la razón detrás de esto es que dificultará la única razón detrás de su existencia.

Puede leer la solución presentada por Andy en su blog aquí: Click . Si tuviera que escribir lo que él ha explicado en breve, diría directamente que utilice las ventanas emergentes para la sección de respuestas. Andy explica que podemos usar windows.open en la sección de respuesta después de que se realice una llamada directamente a la acción del usuario que no serán bloqueados por los bloqueadores de ventanas emergentes.

Como xaxxon ha explicado, es posible verificar después de la ejecución de windows.open si estaba bloqueado o no. En general, eso es lo que hacen las personas y los desarrolladores mientras hacen cualquier característica de servicio adicional, tenga eso en cuenta. Por ejemplo, estaba implementando el sistema de autenticación de dígitos de Twitter. Solía ​​buscar mensajes después de fallar en la ejecución del comando emergente y luego podía mostrar un mensaje al usuario para habilitar la ventana emergente, pero luego encontré la solución mencionada anteriormente. Hace que todo sea más limpio y ordenado.

¿Necesito saber cuándo el usuario hace clic en el botón que activa window.open si hay una API estable / forma de saber de antemano si el usuario tiene un bloqueador de elementos emergentes de forma activa?

En algunos casos, el usuario no sabe / no le presta atención a su bloqueador de elementos emergentes (que bloquea la nueva ventana). Me gustaría informarles mediante algún diálogo / o algo para autorizar una nueva ventana haciendo clic en Permitir.


La siguiente es una solución jQuery para la comprobación del bloqueador de ventanas emergentes. Se ha probado en FF (v11), Safari (v6), Chrome (v23.0.127.95) y IE (v7 & v9).

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."); } };

Uso:-

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

Espero que ayude.


Usa este código para verificar

var popupBlockerChecker = {check:function(b) { var a = this; b ? /chrome/.test(navigator.userAgent.toLowerCase()) ? setTimeout(function() { a._is_popup_blocked(a, b); }, 200) : b.onload = function() { a._is_popup_blocked(a, b); } : a._displayError(); }, _is_popup_blocked:function(b, a) { 0 == 0 < a.innerHeight && b._displayError(); }, _displayError:function() { alert("Popup Blocker is enabled! Please add this site to your exception list."); }};

y el uso será algo así como

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


window.open () en su mayoría solo se bloqueará si no fue activado por un evento de clic.

Para confirmar que la ventana se ha cargado:

var loaded = false; function windowLoaded() { alert("The popup loaded"); loaded = true } function pause(milliseconds) { var dt = new Date(); while ((new Date()) - dt <= milliseconds) { /* Do nothing */ } } document.write("start..."); //open the window var win = window.open("window.html"); // If window.open returned an object if(win) { win.onload = function() { win.RunCallbackFunction = windowLoaded; }; document.write("popup sent..."); pause(3000); // Verify that out window loaded if (loaded == false) document.write("check you popup blocker!"); else document.write("ok!"); } else { document.write("window.open() was blocked..."); }


Window.open(...) devuelve un identificador a la nueva ventana si existe. Si no tiene un identificador de la nueva ventana, es un buen indicio de que la ventana estaba bloqueada.

https://developer.mozilla.org/en-US/docs/Web/API/Window/open

Desde: https://davidwalsh.name/popup-block-javascript

var windowName = ''userConsole''; var popUp = window.open(''/popup-page.php'', windowName, ''width=1000, height=700, left=24, top=24, scrollbars, resizable''); if (popUp == null || typeof(popUp)==''undefined'') { alert(''Please disable your pop-up blocker and click the "Open" link again.''); } else { popUp.focus(); }