2012-04-11 4 views
1

Ich entwickelte eine kleine Web-App, die perfekt in meinen Browsern läuft (Firefox, Chrome, Safari auf dem iPad). Dann habe ich beschlossen, die App so zu modifizieren, dass sie als eigenständige Web-App auf meinem iPad läuft. Das war kein Problem, da ich ziemlich gute Informationen im Internet gefunden habe.iPad Web App friert nach dem Öffnen eines Links in Safari

Weil ich viele App-interne Links verwenden, habe ich den folgenden JavaScript jQuery-Code in die App:

if (window.navigator.standalone) { 
    // running as web app 

    $(function() { 
     $('a').each(function() { 
      if (!$(this).hasClass('external')) { 
       var href = $(this).attr('href'); 
       $(this).attr('href', 'javascript:this.location = \'' + href + '\''); 
      } 
     }); 
    }); 
} 

Falls die App im Standalone-Modus ausgeführt wird, ändert dieser Code alle Links, die zu tun Sie haben nicht die CSS-Klasse external, damit sie nicht in einem neuen Safari-Fenster geöffnet werden. Dieser Code funktioniert gut.

Das Problem ist, dass, wenn ich einen Link öffnen, der extern ist, öffnet ein neues Safari-Fenster (wie erwartet). Aber wenn ich mit der Vier-Finger-Geste zurück zu meiner App wechsle, ist die App eingefroren: Kein Scrollen, nichts anklickbar, kein Taskwechsel, keine Fünf-Finger-Geste mehr. Wenn ich die Home-Taste drücke, zeigt das iPad für einen Bruchteil einer Sekunde meinen Startbildschirm an und wechselt dann sofort zum iPad-Suchbildschirm. Wenn ich den Bildschirm aus- und wieder einschalte, bin ich auf dem Startbildschirm.

Die einzige Geste, die funktioniert, ist die Vier-Finger-Geste, um die Taskleiste aufzurufen (ist das der Name?). Wenn ich die App über die Taskleiste beende, bleibt sie auf dem Bildschirm und das iPad verhält sich so, als hätte ich die App nicht beendet (siehe letzten Absatz). Fühlt sich an wie die App auf irgendeine verrückte Art und Weise.

Ich weiß nicht, was ich falsch gemacht habe. Es ist eine ziemlich einfache Webseite mit sehr wenig JavaScript und einer HTML-Struktur, die nicht tief verschachtelt ist.

Das Gerät ist ein iPad 2 3G mit iOS 5.1.

Kann mir jemand dabei helfen?

Antwort

1

Also gab ich diesen Code, bevor ich diesen Link lesen: iPhone Safari Web App opens links in new window

Sie This answer versuchen Haben?


meine Antwort:

if (window.navigator.standalone) { 
    // running as web app 

    $(function() { 
    $('a').each(function() { 
     if (!$(this).hasClass('external')) { 
      var href = $(this).attr('href'); 
      $(this).click(function() { window.location = href; return false;}); 

     } 
    }); 
    }); 
} 
+0

Der 'href' Ersatz ist eigentlich die zweite Version meines JS-Code. Der erste sah mehr wie Sie aus. Ich habe es geändert, weil ich sicherstellen wollte, dass eine falsche Ereignisbehandlung den Fehler nicht verursacht. Ein In-App-Link ist etwas wie '/? Skip = 50 & order = title', externe Links haben unterschiedliche Domains. – fero

+0

Aber warum JS Ersatz für alle In-App-Links? Warum ersetzen Sie die EXTERNAL-Links nicht durch "sorry you not online", wenn Sie das brauchen – mplungjan

+0

Ich bin mir nicht sicher, ob Sie richtig verstanden haben, was ich mit internen und externen Links meine. Wenn Sie eine eigenständige Webanwendung für iOS entwickeln, wird die Webanwendung nicht in einem normalen Browserfenster angezeigt. Es hat das Aussehen und Gefühl einer nativen App (wenn gut programmiert). Aber wenn Sie auf einen gewöhnlichen Link tippen (egal wo er hingehört), öffnet iOS Safari, um diesem Link zu folgen (das ist, was ich extern anrufe). Wenn Sie in Ihrer App zu einer anderen Seite navigieren möchten, müssen Sie die URL der aktuellen Seite mithilfe von JavaScript ersetzen. Siehe [link] (http://stackoverflow.com/questions/2898740/) – fero

Verwandte Themen