2012-08-05 30 views
12

Ok. Ich versuche mich bei Twitter anzumelden. Das Fenster wird in diesem Code nicht geöffnet. Die Antwort, die alarmiert wird, ist nicht null und ist eine Verknüpfung zu einem Anmeldebildschirm. Irgendwelche Ideen?Javascript window.open funktioniert nicht

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

Die meisten Browser blockieren 'window.open', wenn es nicht mit einem Benutzerereignis (Tastatur, Maus) verbunden ist. – Zeta

Antwort

32

Die Standard-Logik-Popup-Blocker in den meisten Browsern enthalten in diesen Tagen keine Anrufe zu window.open() blockiert, die nicht das direkte Ergebnis einer Benutzeraktion sind. Code, der von Timern oder asynchronen Callbacks ausgelöst wird (wie Ihre Ajax-Ready-Funktion), wird als NICHT direkt von Benutzeraktionen verursacht behandelt und das neue Popup-Fenster wird generell blockiert.

Sie können überprüfen, was passiert, indem Sie vorübergehend die Popup-Blockierung Ihres Browsers ändern (deaktivieren) und sehen, dass es dann zu arbeiten beginnt.

Wahrscheinlich müssen Sie als Workaround das Fenster nach der Benutzeraktion erstellen, die diesen Code-Thread gestartet hat, und dann den Inhalt in das Fenster einfügen, wenn Sie Ihre Ajax-Antwort erhalten. Der Browser wird das wahrscheinlich erlauben. Ich weiß, dass dies aus visueller Sicht weniger wünschenswert ist, aber Sie können temporären Inhalt in das Fenster einfügen, bis die Ajax-Antwort eintrifft (etwas wie "Laden ...").

+7

Erstaunlich nützlich! Erstellen Sie ein Fenster mit Klick auf 'window.open' und geben Sie es an Ihren Callback weiter, in dem Sie' mywindow.location = satururl' eingeben – lajarre

1

hatte genau dieses gleiche Problem. Nur für den Fall, dass Sie den Code haben, der es behoben hat. Ich habe das verwendet:

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)); 
Verwandte Themen