2009-05-20 16 views
11

¿Alguien puede ayudar? Tengo una ventana emergente que está siendo bloqueada. Es una ventana emergente que se crea porque alguien ha hecho clic en una imagen impresa en mi sitio.Javascript window.open está bloqueado por IE popup blocker

Pensé que se supone que IE no debe bloquear estos cuando la ventana emergente vino a través de un onclick?

¿Alguien puede ayudar? La variable child1 siempre se devuelve como NULL si está habilitado bloqueo de ventanas emergentes ...

Tal vez el problema es que el evento onclick continuación, pasa el control a una nueva función que carga un archivo html y hace child.document.write

Aquí es mi sencilla código ..

var width = 800; 
var height = 600; 
var left = parseInt((screen.availWidth/2) - (width/2)); 
var top = parseInt((screen.availHeight/2) - (height/2)); 
var windowFeatures = "width=" + width + ",height=" + height 
    + ",menubar=yes,toolbar=yes,scrollbars=yes,resizable=yes,left=" 
    + left + ",top=" + top + "screenX=" + left + ",screenY=" + top;  

child1 = window.open("about:blank", "subWind", windowFeatures); 

Respuesta

13

El problema será que se abren sólo devolverá una referencia a la ventana si está navegando a algún lugar dentro de su anfitrión actual. Está navegando por: en blanco, que no está dentro de su host.

Pruebe agregar un archivo blank.htm a su sitio y ábralo en su lugar. Todavía no estoy seguro de que document.write esté permitido, el documento no estará abierto para escritura, aunque puede manipular el DOM del documento en blanco existente.

+0

Sí, gracias, fue básicamente, necesito cargar un archivo de mi web actual y no en BLANCO ... así que creé un archivo html vacío ... lo cargué y usé windows.write para escribir mi html .. gracias usted y gracias por todos elses comentarios –

3

Lo bloquea porque no es un ancla con un target = "_ blank". Está creando la ventana emergente programáticamente.

Simplemente haga esto después del ejemplo de código que ha proporcionado.

if (!child1) { 
     alert('You have a popup blocker enabled. Please allow popups for www.yourSite.com'); 
} 
+2

Esto no funciona en IE 8 – JBeckton

0

Te sugiero que hagas una [forma] ficticia con un target = "_ blank" en lugar de un window.open().

Espero que funcione.

Atentamente.

PD: Supongo que agregar su sitio a "sitios de confianza" no es una opción, ¿verdad?

4

El bloqueador de elementos emergentes de Internet Explorer, cuando se establece en el nivel de filtro Medium, no bloqueará las ventanas abiertas por JavaScript si se han iniciado por una acción del usuario. Los siguientes trabajos finos en IE 6, 7 y 8:

<script type="text/javascript"> 
function openWin() { 
    var width = 800; 
    var height = 600; 
    var left = Math.floor((screen.availWidth - width)/2); 
    var top = Math.floor((screen.availHeight - height)/2); 
    var windowFeatures = "width=" + width + ",height=" + height + 
      ",menubar=yes,toolbar=yes,scrollbars=yes,resizable=yes," + 
      "left=" + left + ",top=" + top + 
      "screenX=" + left + ",screenY=" + top; 
    child1 = window.open("about:blank", "subWind", windowFeatures); 
    writeTo(child1); 
} 
function writeTo(w) { 
    w.document.write('Test'); 
} 
</script> 
<a href="#" onclick="openWin();return false;">Test</a> 

Tenga en cuenta que el uso de document.write en la nueva ventana abierta no funciona en algunos navegadores web. También tenga en cuenta que esto puede desencadenar un bloqueador de pop-ups en otros navegadores, incluso si funciona como se muestra en Internet Explorer.

He visto que invocar JavaScript desde un evento onclick puede, en algunos casos, provocar que se active el bloqueador de pop-ups. Parece tener algo que ver con cómo ahorawindow.open() es del evento onclick. Demasiados niveles de funciones para llamar a funciones antes de llamar al window.open(). Sin ver su implementación exacta, no puedo decirle si este es el problema que está teniendo o no.

+0

nice code its working! gracias –

1

intente código

var newWin = window.open(...); 
if (newWin && newWin.top) { 
    // popup has opened 
} else { 
    // popup has been blocked 
} 
0

tengo una idea en 10/11 es decir:

let win = window.open(); 
setTimeout(function(){ 
    win.customParam = 'xxxx'; 
}); 

en la victoria, se puede obtener después de customParam ventana onload con un temporizador o bucle:

Cuestiones relacionadas