2012-05-23 22 views
9

Otwieram nowe okno za pomocą window.open(), aby przekierować użytkowników do strony logowania oauth. Jednak po pomyślnym zalogowaniu, gdy użytkownik jest przekierowywany z powrotem do mojej aplikacji, poprzednie okno z wywołaniem window.open nie zamyka się w ios.window.close() nie działa na iOS

Na iPadzie zamknęłoby to niewłaściwe okno, a na iPhonie nie zamykało wcale okna. Kod działa poprawnie na Androida i na komputerach w wersjach Chrome i Firefox.

Po zakończeniu kibicowania znalazłem poprawkę (zamieszczoną poniżej). Jeśli ktokolwiek ma jakieś lepsze pomysły lub główne przyczyny, opublikuj tutaj.

Odpowiedz

4

Po poszukiwaniach, znalazłem ten tweet które stanowiska obejście - https://twitter.com/#!/gryzzly/statuses/177061204114685952 przez @gryzzly

Skopiowane tutaj w pełni

window.close() nie działa na iOS po window.open() ing lub target = "_ blank"? do setTimeout (window.close, timeout); gdzie Timeout> 300.

To wraz z wyjęciem .focus() w którym skupiam się na okna nadrzędnego przed zamknięciem nowe okno całkowicie rozwiązało problem dla mnie.

+2

tweet poster here! lepszą sugestią jest użycie 'window.addEventListener (" load ", window.close);' –

+0

Przeniosłem się z tego projektu, więc nie jestem pewien, czy faktycznie próbowałem "załadować" czy nie, ale to czyni sens. Spisze to na przyszłość, dzięki! – JohnP

+2

to nie działa na safari iOS8 – walnutmon

6

Oto, do czego doszedłem do pracy ...
Nigdy nie mogłem uzyskać funkcji window.close do pracy; nawet w setTimeout jak pokazano powyżej

Przetestowałem to na:
        Windows XP: Chrome20, Firefox12, IE8
        Android Gingerbread: Android przeglądarka
        Android Ice Cream : przeglądarka dla Androida, Firefox
        Ipad: domyślna przeglądarka (zakładam, że jest to safari)
        iPhone 3GS i 4S: default


<SCRIPT LANGUAGE=\"JavaScript\"> 
    function refresh() { 
     var sURL = unescape("http://(some web page)/"); 
     window.location.replace(sURL); 
    } 
    function closeWindow() { 
     var isiPad = navigator.userAgent.match(/iPad/i) != null; 
     var isiPhone = navigator.userAgent.match(/iPhone/i) != null; 
     if (isiPad || isiPhone) { 
      setTimeout(\"refresh()\", 300); 
     } else { 
      window.close(); 
     } 
    } 
</SCRIPT> 

...... i kod HTML .......

<p><input class="bigbutton" type="button" name="cancel" id="cancel" value="Cancel" onClick="closeWindow()"></p> 

Powiązane problemy