Ouvrir les liens externe à la webview dans safari
Par0teck
Membre
Bonjour à tous,
Je suis à la recherche depuis plusieurs jours sur comment forcer l'ouvrir des liens externe à la webview dans safari (ou au mieux dans un mini navigateur)
Car la pour le moment quand une personne clique sur un liens externe sa luis ouvre le site dans la webview...
Donc j"ai trouvez ce petit bout de code pour faire cela :
Que je place dans mon Delegate mes rien n'y fait les liens externe à ma webview s'ouvre toujours dans la même webview (Tester sur mon device)
Merci beaucoup à la personne qui pourra m'aider
Edit : j'ai essayer de m'être le code dans mon ViewController.h comme sa :
Et sa ne fonctionne toujours pas malheureusement
Ai-je Fais Une Erreur ?
Merci beaucoup de votre aide
Bonne journée à vous
Je suis à la recherche depuis plusieurs jours sur comment forcer l'ouvrir des liens externe à la webview dans safari (ou au mieux dans un mini navigateur)
Car la pour le moment quand une personne clique sur un liens externe sa luis ouvre le site dans la webview...
Donc j"ai trouvez ce petit bout de code pour faire cela :
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request<br /><br /> navigationType:(UIWebViewNavigationType)navigationType {<br /> // if the new content is due to click on a link<br /> if (navigationType == UIWebViewNavigationTypeLinkClicked) {<br /> // standard way to launch external app, in this case safari<br /> [[UIApplication sharedApplication] openURL:request.URL];<br /> <br /> // tell the web view that we have handle it, so it should stop loading<br /> return false;<br /> }<br /> <br /> // otherwise, tell the web view to load the content<br /> return true;<br />}
Que je place dans mon Delegate mes rien n'y fait les liens externe à ma webview s'ouvre toujours dans la même webview (Tester sur mon device)
Merci beaucoup à la personne qui pourra m'aider
Edit : j'ai essayer de m'être le code dans mon ViewController.h comme sa :
@implementation MonAppViewController<br />@synthesize webView;<br /><br /><br /><br />/*<br />// The designated initializer. Override to perform setup that is required before the view is loaded.<br />- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {<br /> self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];<br /> if (self) {<br /> // Custom initialization<br /> }<br /> return self;<br />}<br />*/<br /><br />/*<br />// Implement loadView to create a view hierarchy programmatically, without using a nib.<br />- (void)loadView {<br />}<br />*/<br /><br /><br /><br />// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.<br />- (void)viewDidLoad {<br /> [super viewDidLoad];<br /><br /> <br /> // Créer une URL<br /> NSURL *urlAddress = [NSURL URLWithString: @"http://www.google.com"];<br /> <br /> // Faire une requête sur cette URL<br /> NSURLRequest *requestObject = [NSURLRequest requestWithURL:urlAddress];<br /> <br /> // Charger la requête dans la UIWebView<br /> [webView loadRequest:requestObject];<br />}<br /><br />- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request<br /><br /> navigationType:(UIWebViewNavigationType)navigationType {<br /> // if the new content is due to click on a link<br /> if (navigationType == UIWebViewNavigationTypeLinkClicked) {<br /> // standard way to launch external app, in this case safari<br /> [[UIApplication sharedApplication] openURL:request.URL];<br /> <br /> // tell the web view that we have handle it, so it should stop loading<br /> return false;<br /> }<br /> <br /> // otherwise, tell the web view to load the content<br /> return true;<br />}<br /><br /><br />/*<br />// Override to allow orientations other than the default portrait orientation.<br />- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {<br /> // Return YES for supported orientations<br /> return (interfaceOrientation == UIInterfaceOrientationPortrait);<br />}<br />*/<br /><br />- (void)didReceiveMemoryWarning {<br /> // Releases the view if it doesn't have a superview.<br /> [super didReceiveMemoryWarning];<br /> <br /> // Release any cached data, images, etc that aren't in use.<br />}<br /><br />- (void)viewDidUnload {<br /> // Release any retained subviews of the main view.<br /> // e.g. self.myOutlet = nil;<br />}<br /><br /><br />- (void)dealloc {<br /> [webView dealloc];<br /> [super dealloc];<br />}<br /><br />@end
Et sa ne fonctionne toujours pas malheureusement
Ai-je Fais Une Erreur ?
Merci beaucoup de votre aide
Bonne journée à vous
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Si ton delegate a bien été fixé, il n'y a rien d'autre à ajouter à priori, j'ai le même code avec un filtrage d'url pour ne rediriger que certaines adresses.
Je ne voit pas trop ce que tu veux dire, comment faire cela?
Merci
Comment faire cela bah par IB en tirant l'outlet "delegate" de la webview vers l'objet que tu utilises comme delegate.
Par code sinon, c'est comme tu veux.
Si tu ne sais pas faire cela, ou que ça ne te parle pas, je te conseille vivement de relire la doc et de te replonger dans les bouquins/tutos sur Cocoa : l'utilisation des delegates mais aussi les outlets, c'est un concept de base de Cocoa qui ne s'explique pas en une phrase, et si tu ne le maà®trises pas tu auras un peu du mal pour la suite.
Mais ce que je voudrais juste, C'est ouvrir tous les liens externes dans Safari.
webView.delegate = self;
Mais il reste encore un petit problème. En faite, maintenant il m'ouvre tous les liens dans safari. Comment faire pour qu'il n'ouvre dans Safari que les lien externes à mon domaine.
avec ça je filtre les adresses iTunes ..
1) Pour tester si une chaà®ne contient une autre chaà®ne, il est plutôt conseillé de tester, avec rangeOfString, si .location != NSNotFound plutôt que si .length>0, mais bon
2) Pour tester un domaine, utiliser plutôt les méthodes de NSURL, comme la méthode "host" qui retourne l'hôte de l'URL ("apple.com"), ou baseURL ou quoi, pour accéder aux parties de la NSURL, puis utiliser isEqualToString pour comparer. Comme ça quel que soit le format de l'URL cela restera valable.
merci pour les conseils
C'était juste pour info en passant
Et au moins ça a le mérite de donner une piste à Par0teck
Après quelque recherche, je me suis retrouvé avec un "hasPrefix"
Du coup la demande est: Si l'url est égale à "MonDomaine", Ouvrir celle-ci dans Safari.
Alors que je voudrait faire exactement l'inverse.
Il faudrait en fait un "hasNotPrefix"
Mais je n'ai pas trouvé de solutions pour avec quelque chose de se genre.
Si mes souvenirs sont bons on utilise le point d'exclamation pour inverser le sens de l'expression.
Du moins je pense. Mais du coup j'ai du tout ou rien, soit sa ouvre tout dans safari, soit rien
Sa a pourtant l'air si simple
Edit: Voilà mon code:
on t'avais orienté sur :
Après "fais ceci si la chaà®ne ne commence pas par toto" c'est pareil que "fait ceci s'il est faux que la chaà®ne commence par toto", le reste est du C de base, il suffit d'inverse ta condition avec "!".
je ne sais pas pourquoi j'étais persuadé que hasprefix prenait juste http / mailto
autant pour moi
Le "!" est déjà placé (Voir le code au-dessus) Mais comme j'ai dit c'est tout ou rien. Il n'a pas l'air de prendre en compte le hasprefix.
J'ai donc essayé la méthode de Extremtouch, ce qui a fonctionné.
Un grand Merci a vous deux
Mais je n'arrive toujours pas à comprendre où est mon erreur avec le hasprefix
J'ai créé une nouvelle application, en partie basée sur une UIWebView.
Et donc plus aucune méthode ne marche.
Je pense que le problème vient du fait que la WebView affichée est appelée dans le Delegate. Et non dans un ViewController comme l'application précédente.
Le problème est qu'avec mon niveau de débutant je n'arrive pas a faire en sorte qu'après le fadeScreen de mon premier view controller, et ensuite reomber sur un autre ViewController et ne pas charger la webView dans le délégate.
Si je me suis bien exprimé.
Merci a vous pour toute piste