2012-05-23 17 views
9

Ich öffne ein neues Fenster mit window.open() um Benutzer auf die oauth Login Seite umzuleiten. Nach erfolgreicher Anmeldung, wenn der Benutzer zurück zu meiner App weitergeleitet wird, schließt sich das vorherige Fenster mit dem Aufruf von window.open nicht in ios.window.close() funktioniert nicht unter iOS

Auf dem iPad würde es das falsche Fenster schließen und auf dem iPhone würde es das Fenster überhaupt nicht schließen. Der Code funktioniert auf Android- und Desktop-Versionen von Chrome und Firefox einwandfrei.

Nach viel rooting fand ich eine Lösung (siehe unten). Wenn jemand bessere Ideen oder Grundursachen hat, bitte hier posten.

Antwort

4

Nach einiger Suche fand ich diesen Tweet der Beiträge eine Abhilfe - https://twitter.com/#!/gryzzly/statuses/177061204114685952 von @gryzzly

hier Kopierte in voller

window.close() funktioniert nicht auf iOS nach window.open() ing oder target = "_ blank"? setze setTimeout (window.close, timeout); wo timeout> 300.

Dies zusammen mit einer .focus(), in dem das Entfernen ich auf dem übergeordneten Fenster den Fokus vor dem Schließen löste das neue Fenster vollständig das Problem für mich.

+2

Tweet Poster hier! Besserer Vorschlag ist es, 'window.addEventListener (" load ", window.close) zu verwenden;' –

+0

Ich bin von diesem Projekt weggegangen, also bin ich mir nicht sicher, ob ich tatsächlich 'load' versucht habe oder nicht, aber das macht Sinn. Wird es für die Zukunft ablegen, danke! – JohnP

+2

dies scheint nicht auf iOS8 Safari zu funktionieren – walnutmon

6

hier ist, was ich landete, um zu arbeiten ...
konnte nie die window.close Funktion zu arbeiten; auch in der setTimeout wie oben

gezeigt testete ich dieses auf:
        Windows XP: Chrome20, Firefox12, IE8
        Android Lebkuchen: Android Browser
        Android Ice Cream : android browser, Firefox
        Ipad: Standard-Browser (ich nehme an, seine Safari)
        Iphone 3gs und 4s:


<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> 

...... und den HTML-Code Standard .......

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

Verwandte Themen