web-dev-qa-db-fra.com

comment ouvrir l'URL dans safari pas dans webview

Je veux ouvrir une URL dans un safari, sortir de l'application et non dans une vue Web.

J'ai implémenté le UIWebViewDelegate mais je n'arrive toujours pas à ouvrir l'URL . En gros, je ne peux pas cliquer sur l'URL.

Ci-dessous le code:

-(void)newView:(NSString *)title Description:(NSString *)desc URL:(NSString *)url{
    webView =[[UIWebView alloc]initWithFrame:CGRectMake(15, 17, 190, 190)];
    webView.backgroundColor=[UIColor clearColor];
    webView.delegate=self;
    webView.opaque = NO;
    [webView loadHTMLString:[NSString stringWithFormat:@"<html><body p style='color:white' text=\"#FFFFFF\" face=\"Bookman Old Style, Book Antiqua, Garamond\" size=\"5\">%@ %@</body></html>", desc,url] baseURL:nil];

    v = [[HUDView alloc] initWithFrame:CGRectMake(60, 70, 220, 220)];

    cancelButton = [UIButton buttonWithType:UIButtonTypeCustom];
    cancelButton.frame = CGRectMake(0, 0, 30, 30);
    [cancelButton setBackgroundImage:[UIImage imageNamed:@"closebox.png"] forState:UIControlStateNormal];
    [cancelButton addTarget:self action:@selector(cancelButtonPressed) forControlEvents:UIControlEventTouchUpInside];
    [v addSubview:cancelButton];
    [v addSubview:webView];
    [self.view addSubview:v];  
}

-(BOOL) webView:(UIWebView *)inWeb shouldStartLoadWithRequest:(NSURLRequest *)inRequest navigationType:(UIWebViewNavigationType)inType {
    if ( inType == UIWebViewNavigationTypeLinkClicked ) {
        [[UIApplication sharedApplication] openURL:[inRequest URL]];
        return NO;
    }

    return YES;
}
19
user578386

Après avoir lu les commentaires, je pense que voici ce que vous recherchez:

Implémentez cette méthode: 

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

à partir de UIWebViewDelegate et en fonction de l'argument de cette requête, vous devriez renvoyer TRUE ou FALSE. Si vous ne souhaitez pas que la vue Web l'ouvre, vous devez appeler:

[[UIApplication sharedApplication] openURL:request.URL];

comme d'autres l'ont mentionné et retournent FALSE.

J'espère que cela t'aides. À votre santé!

EDIT: Si les liens ne sont pas reconnus dans votre vue Web, essayez ceci: 

[webView setDataDetectorTypes:UIDataDetectorTypeLink]
38
George

Cette réponse était facilement disponible via Google:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.Apple.com"]];

Il suffit de mettre cela dans la touche ou l'événement de votre choix, puis de lui transmettre une URL (remplacez le @ "http: /www.Apple.com").

42
JTApps
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.google.com"]];
8
Obaid Maroof

Pour iOS 10+

// Objective-C
UIApplication *application = [UIApplication sharedApplication];
[application openURL:URL options:@{} completionHandler:nil];

// Swift
UIApplication.shared.open(url, options: [:], completionHandler: nil)

Pour plus d'informations, reportez-vous à THIS .

4
Dharmesh

Cela fonctionne pour moi:

[[NSWorkspace sharedWorkspace] openURL: [NSURL URLWithString: @"http://www.Apple.com"]];
3
Bijan
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{

    if (![[NSString stringWithFormat:@"%@",[request URL]] containsString:@"file"] ) {
        [[UIApplication sharedApplication] openURL:[request URL]];
        return NO;
    }
    return YES;
}

J'ai utilisé un fichier HTML en local. Dans ce code HTML, il y a quelques liens . Si vous définissez le délégué UIWebViewDelegate et utilisez ce code HTML local, celui-ci s’ouvrira dans votre WebView et les autres liens s’ouvriront dans safari
J'ai écrit "fichier" car ce lien est "fichier: ///Utilisateurs/~/x.app/about.html" en local.

2
kordiseps

******************** Rapide **********************

// MARK: Bouton Cliquez sur Ouvrir avec SafariViewController

private var urlString:String = "https://google.com"

@IBAction func openWithSafariVC(sender: AnyObject)
{

    let svc = SFSafariViewController(URL: NSURL(string: self.urlString)!)
    svc.delegate = self
    self.presentViewController(svc, animated: true, completion: nil)
}

// MARK: SafatriViewConroller Dismiss 

func safariViewControllerDidFinish(controller: SFSafariViewController)
{

    controller.dismissViewControllerAnimated(true, completion: nil)
}
1
Bhavin Chauhan

J'ai trouvé cette réponse dans google mais je dois, après avoir ouvert le navigateur, fermer mon application et continuer le navigateur.

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://google.com"] options: @{} completionHandler: nil];

dans Android peut le faire facile d'appeler la méthode finish() comment puis-je le faire

1
I don't know

Rapide et pas de chemin WebView

    if let url = NSURL(string: "http://www.Apple.com") {
        UIApplication.sharedApplication().openURL(url)
    }
0
dirtsniffer

Swift 3 (iOS 10+):

if let url = URL(string: "http://www.seligmanventures.com") {
    UIApplication.shared.open(url, options: [:], completionHandler: nil)
}
0
Charlie Seligman