2012-08-05 26 views
12

Ok. Estoy intentando iniciar sesión en Twitter. La ventana no se abre en este código. La respuesta que se alerta no es nula y es un enlace a una pantalla de inicio de sesión. ¿Algunas ideas?Javascript window.open no funciona

var url = "./twitter_login.php"; 
var con = createPHPRequest(); 

con.open("POST",url,true); 
con.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 
con.send(""); 

var response = ""; 

con.onreadystatechange = function() { 

    if(con.readyState==4 && con.status==200) { 

     response = con.responseText;  
     alert(response); 
     window.open(response,"twitter","menubar=1,resizable=1,width=350,height=500");   

    } 

} 
+6

La mayoría del bloque de navegador 'window.open' si no está asociado con un evento de usuario (teclado, mouse). – Zeta

Respuesta

32

La lógica emergente bloqueador norma contenida en la mayoría de los navegadores en estos días bloqueará todas las llamadas a window.open() que no son el resultado directo de una acción del usuario. El código que se dispara por temporizadores o por cualquier devolución de llamada asíncrona (como su función lista para ajax) se tratará como NO causado directamente por acciones del usuario y la nueva ventana emergente generalmente se bloqueará.

Puede verificar que esto es lo que está sucediendo al cambiar temporalmente el bloqueo de ventanas emergentes de su navegador (apagarlo) y ver que luego comienza a funcionar.

Probablemente lo que tiene que hacer como solución alternativa es crear la ventana sobre la acción del usuario que inició este hilo de código y luego colocar el contenido en la ventana cuando obtiene su respuesta ajax. El navegador probablemente lo permita. Sé que eso es menos deseable desde una perspectiva visual, pero puedes poner algo de contenido temporal en la ventana hasta que aparezca la respuesta ajax (algo así como "cargar ...").

+7

¡Sorprendentemente útil! Cree una ventana al hacer clic con 'window.open', luego páselo a su devolución de llamada en la que hará' mywindow.location = someurl' – lajarre

1

Acabo de tener este mismo problema. En caso de que quisieras el código que lo arregló. Utilicé esto:

Cuestiones relacionadas