2012-08-05 12 views
12

Ok. Sto cercando di accedere a Twitter. La finestra non si apre in questo codice. La risposta che viene avvisata non è nulla ed è un collegamento a una schermata di accesso. Qualche idea?Javascript window.open non funziona

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 maggior parte del blocco del browser 'window.open' se non è associato a un evento utente (tastiera, mouse). – Zeta

risposta

32

La logica standard pop-up-bloccante contenuta nella maggior parte dei browser in questi giorni bloccherà tutte le chiamate a window.open() che non sono il risultato diretto di un'azione utente. Il codice che viene attivato da timer o da qualsiasi callback asincrono (come la funzione ajax ready) verrà considerato NON causato direttamente dalle azioni dell'utente e la nuova finestra popup verrà generalmente bloccata.

È possibile verificare ciò che sta accadendo modificando temporaneamente il blocco popup del browser (disattivandolo) e verificando che inizi a funzionare.

Probabilmente ciò che è necessario fare come soluzione è creare la finestra sull'azione dell'utente che ha avviato questo thread di codice e quindi inserire il contenuto nella finestra quando si ottiene la risposta ajax. Il browser probabilmente lo permetterà. So che è meno desiderabile dal punto di vista visivo, ma puoi inserire del contenuto temporaneo nella finestra finché non arriva la risposta ajax (qualcosa come "caricamento ...").

+7

Incredibilmente utile! Crea una finestra al clic con 'window.open', quindi passa al callback in cui eseguirai' mywindow.location = someurl' – lajarre

1

Appena avuto lo stesso identico problema. Nel caso in cui volessi il codice che lo ha risolto. Ho usato questo:

newWindow = window.open("", "_blank"); 

request = $.ajax({ ... my request which returns a url to load ... }) 

request.done((function(_this) { 
     return function(data, textStatus, jqXHR) { 
      return newWindow.location = data.Url; 
     }; 
     })(this));