Phonegap ist ja der Webbrowser der deine App auf jedem Smartphone anzeigt – als App. Der Vorteil gegenüber einer mobilen Webseite ist die Tatsache, dass die App nun über den App Store vertrieben werden kann, man viele Plattformen bedienen kann und zusätzlich auf Eigenschaften zugreifen kann, die eine HTML5-App nicht kann.
Dazu gibt es plattformspezifische Plug-ins, welche Systemfunktionen in Javascript abbildet.
Möchte man nun aber einen Link außerhalb der app starten, möchte man einerseits auch wieder zurück.. müsste man also was über iFrame etc. basteln, aber der User wird nicht glücklich da seine Cookies etc im Safari oder so sind.
Deswegen wäre es ja sinnvoll den Link im Standard-Browser zu starten.
Dazu muss als erstes der Link mit target auf “_blank” gesetzt werden.
Anschliesend muss die MainViewController.m ergänzt werden. In Zeile 112-130 sind kommentierte Funktionen (Cordoba 2.4), und das ist auch gut so. Sollte es eine Zeile geben wie:
- (BOOL) webView:(UIWebView*)theWebView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType
dann ist das der Methodenkopf und die Gesamte Funktion muss kommentiert werden.
komplette Funktion:
- (BOOL) webView:(UIWebView*)theWebView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType { return [super webView:theWebView shouldStartLoadWithRequest:request navigationType:navigationType]; }
und ersetzt werden durch:
- (BOOL)webView:(UIWebView *)theWebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { NSURL *url = [request URL]; // die ext. URL wird geprüft und bei Bedarf an Safari weitergeleitet.. sonst öffnen im internem webView if ([[url scheme] isEqualToString:@"http"] || [[url scheme] isEqualToString:@"https"]) { [[UIApplication sharedApplication] openURL:url]; return NO; } else { return [ super webView:theWebView shouldStartLoadWithRequest:request navigationType:navigationType ]; } }
der Code ist relativ einfach:
In Zeile 3 wird eine Variable url definiert vom Typ NSURL und belegt mit der URL aus dem request den UIWebView erhalten hat (getriggert durch das Event shouldStartLoadWithRequest).
In Zeile 7 wird geschaut ob das Schema http bzw. https entspricht was bedeutet, dass es ein externer Link ist (target=”_blank” ist trotzdem notwendig!). Wenn das der Fall ist wird die damit verknüpfte App gestartet(Zeile 8). Anderenfalls wird der Request weitergeleitet an die UIWebView-Komponente(Zeile 12).
DANKE! Endlich ein Ansatz der funktioniert.
Irgenwie schein ein riesen durcheinander bei diesem Problem zu herrschen. Die Phonegap Doku zeigt zwar Wge auf, wie man externe Links im browser öffnen kann, nur leider funktionieren die bei mir nicht (_blank sollte laut Doku reichen).
Leider funktioniert dein Weg mit PG-Build nicht, … aber man kann nicht alles haben.
THX Grappa
Leider funktioniert diese Lösung nicht mehr. Beim Einbinden des Codes erhalte ich eine Fehlermeldung in XCode bei der Else Schleife.
“No visible @interface for CDView Controller declares the selector ‘webView:shouldStartLoadWithRequest:navigationType:”
Haben Sie hier zufällig bereits eine andere Lösung?
nein leider nicht – konzentriere mich aktuell mehr auf Xamarin für Cross-Plattform-Entwicklung.