2012-08-05 16 views
12

Ok. Próbuję zalogować się do Twittera. Okno nie otwiera się w tym kodzie. Odpowiedź, która zostanie ostrzeżona, nie jest pusta i jest linkiem do ekranu logowania. Jakieś pomysły?Javascript window.open nie działa

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

Większość bloków przeglądarki 'window.open', jeśli nie jest związana ze zdarzeniem użytkownika (klawiatura, mysz). – Zeta

Odpowiedz

32

Standardowa logika popup-blocker zawarte w większości przeglądarek te dni będą blokować żadnych połączeń do window.open() że nie są bezpośrednim wynikiem działania użytkownika. Kod wywoływany przez liczniki czasu lub asynchroniczne wywołanie zwrotne (np. Funkcja ajax ready) będzie traktowany jako NIE spowodowany bezpośrednio przez akcje użytkownika, a nowe okno wyskakujące będzie generalnie blokowane.

Możesz sprawdzić, co się dzieje, tymczasowo zmieniając wyskakujące okno przeglądarki (wyłączając) i zobacz, że zaczyna działać.

Prawdopodobnie powinieneś zrobić to, aby utworzyć okno na akcję użytkownika, która uruchomiła ten wątek kodu, a następnie umieść zawartość w oknie, gdy otrzymasz odpowiedź ajax. Przeglądarka prawdopodobnie to pozwoli. Wiem, że jest to mniej pożądane z wizualnej perspektywy, ale możesz umieścić tymczasową zawartość w oknie, dopóki nie pojawi się odpowiedź ajax (coś w stylu "ładowanie ...").

+7

Niezwykle przydatne! Utwórz okno na kliknięcie za pomocą 'window.open', a następnie przekaż je do swojego wywołania zwrotnego, w którym zrobisz' mywindow.location = someurl' – lajarre

1

Po prostu miałem dokładnie ten sam problem. Na wypadek, gdybyś chciał kodu, który to naprawił. Użyłem tego:

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)); 
Powiązane problemy