Как открыть URL в сафари не в веб-просмотре - программирование
Подтвердить что ты не робот

Как открыть URL в сафари не в веб-просмотре

Я хочу открыть URL-адрес в сафари, outisde приложения, а не в веб-просмотре.

Я реализовал UIWebViewDelegate, но я все еще не могу открыть URL. В принципе, я не могу нажать на URL.

Ниже приведен код:

-(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;
}
4b9b3361

Ответ 1

Прочитав комментарии, я думаю, что это то, что вы ищете:

Внедрите этот метод:

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

из UIWebViewDelegate и в зависимости от аргумента запроса вы должны вернуть TRUE или FALSE. Если вы не хотите, чтобы веб-просмотр открыл его, вы должны позвонить:

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

как упоминались другие, и верните FALSE.

Надеюсь, это поможет. Ура!

РЕДАКТИРОВАТЬ: Если ссылки не распознаются в вашем веб-представлении, попробуйте следующее:

[webView setDataDetectorTypes:UIDataDetectorTypeLink]

Ответ 2

Этот ответ был легко доступен через Google:

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

Просто поместите это в свою кнопку или какое-либо событие, которое вы хотите называть, а затем передайте ему URL-адрес (замените @ "http:/www.apple.com" ).

Ответ 3

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

Ответ 4

Для iOS 10 +

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

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

Для получения дополнительной информации см. ЭТО.

Ответ 5

Это работает для меня:

[[NSWorkspace sharedWorkspace] openURL: [NSURL URLWithString: @"http://www.apple.com"]];

Ответ 6

- (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;
}

Я использовал html файл в локальном. В этом html есть некоторые ссылки. Если вы установите делегат UIWebViewDelegate и этот локальный html откроется в вашем веб-браузере, а другие ссылки откроются в сафари
Я написал "файл", потому что эта ссылка "file:///Users/~/x.app/about.html" в локальном.

Ответ 7

******************** Swift **********************

//MARK: кнопка Нажмите "Открыть" с помощью 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)
}

Ответ 8

Я нашел этот ответ в google, но мне нужно после открытия браузера завершить работу моего приложения и продолжить браузер.

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

в Android может сделать Это легко вызвать метод finish(), как я могу это сделать

Ответ 9

Swift и без веб-просмотра

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

Ответ 10

Swift 3 (iOS 10+):

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

Ответ 11

Обновлено для Swift 4.2

func webView(_: UIWebView, shouldStartLoadWith: URLRequest, navigationType: UIWebView.NavigationType) -> Bool {
    if navigationType == UIWebView.NavigationType.linkClicked {
        UIApplication.shared.open(shouldStartLoadWith.url!, options: [:], completionHandler: nil)
        return false
    }
    return true
}