22

我想在 safari 中打开一个 url,在应用程序之外而不是在 webview 中。

我实现了UIWebViewDelegate但我仍然无法打开网址。基本上我无法点击网址。

下面是代码:

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

10 回答 10

44

这个答案很容易通过谷歌获得:

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

只需将它放在您的按钮按下或您想要调用它的任何事件中,然后将它传递给它一个 URL(替换 @"http:/www.apple.com")。

于 2012-07-17T14:36:52.087 回答
42

阅读评论后,我认为这就是您要寻找的内容:

实现这个方法:

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

UIWebViewDelegate并取决于该请求参数,您应该返回TRUEor FALSE。如果您不希望 web 视图打开它,您应该调用:

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

正如其他人提到的并返回FALSE

希望这可以帮助。干杯!

编辑:如果您的网页视图中无法识别链接,请尝试以下操作:

[webView setDataDetectorTypes:UIDataDetectorTypeLink]
于 2012-07-17T15:08:04.820 回答
8
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.google.com"]];
于 2012-07-17T14:37:57.227 回答
5

对于 iOS 10+

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

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

有关更多信息,请参阅

于 2016-12-10T06:54:32.970 回答
3

这对我有用:

[[NSWorkspace sharedWorkspace] openURL: [NSURL URLWithString: @"http://www.apple.com"]];
于 2014-06-14T19:31:22.567 回答
2
- (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 将在您的 webView 中打开,而其他链接将在 safari 中打开
我写了“文件”,因为这个链接是“文件:///Users/~/x.app/about.html”在当地。

于 2015-05-20T11:37:33.860 回答
1

******************** 斯威夫特 **********************

//MARK: Button Click on open with 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)
}
于 2015-10-02T12:04:41.983 回答
1

我在谷歌找到了这个答案,但我需要在打开浏览器后终止我的应用程序并继续浏览器。

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

在Android中可以做到调用finish()方法很容易我该怎么做

于 2017-05-20T08:35:31.210 回答
0

Swift 并且没有 webview 方式

    if let url = NSURL(string: "http://www.apple.com") {
        UIApplication.sharedApplication().openURL(url)
    }
于 2016-02-20T06:33:22.287 回答
0

斯威夫特 3 (iOS 10+):

if let url = URL(string: "http://www.seligmanventures.com") {
    UIApplication.shared.open(url, options: [:], completionHandler: nil)
}
于 2016-11-28T20:42:50.123 回答