2010-09-06 5 views
2

Mon application comporte un contenu qui (pour des raisons de formatage du texte) est présenté dans un UIWebView. Dans le contenu, il existe des liens, dont certains devraient ouvrir leur cible dans Safari mobile, tandis que d'autres devraient naviguer dans le contenu. Jusqu'ici, j'ai intercepté les demandes de liaison à l'aide d'un délégué UIWebView. Dans ma mise en œuvre deUIWebView: ouvre des liens dans Safari, certains dans la vue

-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 

Je vérifie l'URL des requêtes en utilisant lastPathComponent ou pathComponents pour les éléments connus pour déterminer si d'ouvrir le lien externe ou dans la vue.

Cependant, je viens de découvrir que ces méthodes ne sont disponibles que depuis iOS 4.0, ce qui rendrait l'application inutile sur iPad. De plus, j'ai le sentiment d'utiliser une solution sale ici.

Existe-t-il une autre façon de "marquer" les liens au sein de mon contenu d'une manière qui les rendra plus faciles à distinguer plus tard, lors du traitement de la demande dans la méthode déléguée?

Merci beaucoup !!

Répondre

1

Vous pouvez convertir la demande d'URL dans une chaîne, et faire une comparaison pour un sous-répertoire sur votre site Web, comme dans les URL qui commencent seulement « http://www.sample.com/myapp/myappswebcontent/ », contre la sous-chaîne initiale de votre URL. Tout le reste, envoyez à Safari.

1

Vous devez définir un délégué de vue politique web: Par exemple, dans le contrôleur, qui contient une vue web

[webView setPolicyDelegate:self]; 

puis remplacer une méthode de decidePolicyForNavigation (ce qui est juste un exemple):

- (void)webView:(WebView *)sender decidePolicyForNavigationAction: (NSDictionary *)actionInformation request:(NSURLRequest *)request frame:(WebFrame *)frame decisionListener:(id <WebPolicyDecisionListener>)listener 
{  
    if ([[actionInformation objectForKey:WebActionNavigationTypeKey] intValue] == WebNavigationTypeLinkClicked) { 
     [listener ignore]; 
     [[NSWorkspace sharedWorkspace] openURL:[request URL]]; 
    } 
    else 
     [listener use]; 
} 

vous pouvez distinguer ce type de lien et ignorer ou utiliser l'écouteur. Si vous l'ignorez, vous pouvez ouvrir le lien dans safari, si vous l'utilisez, le lien s'ouvrira dans votre webview.

HTH

+0

Il me semble que cela ne fonctionnera que sur mac, pas sur iPhone ... – Toastor

+0

Remplacez les bits NSWorkspace par UIApplication sharedApplication. UIApplication a une méthode openURL: comme pleurer. Vérifiez l'en-tête UIApplication. –

+0

à droite, désolé, cet exemple provient d'une application mac, utilisez openURL de sharedApplication comme Chris Parker a écrit –

Questions connexes