Mein Blog

externe Links nicht in PhoneGap öffnen

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

Die mobile Version verlassen