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