在Safari中打开链接而不是UIWebVIew?

问题描述:

我有一个应用程序UIWebViewUIViewController。我从Web服务加载HTML像这样的字符串:在Safari中打开链接而不是UIWebVIew?

self.webView loadHTMLString:_string baseURL:nil 

是否有可能在该字符串的HTML链接将在浏览器中的一个UIWebView在我的应用程序打开,而不是?我怎样才能做到这一点?

我在UIViewController中尝试这一点, “主机” 的一个UIWebView:

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

它似乎并不奏效....

任何想法?

+0

你张贴应该工作的代码,假设[请求URL]是Safari(或iOS设备上的其他应用程序)可以处理的一种URL。你能发布一个用户可以点击的网址的例子吗? – Greg 2010-12-15 17:14:03

有你的UIWebView的委托设置为您UIViewController?就我所见,代码没有任何明显的错误,所以它可能会是这样的小事。

+0

是的,我做到了。 但我没有添加这个如下:不确定它是错的或正确的,但ut似乎工作:webView.delegate = self;添加此错误是否有误? – treasure 2010-12-15 18:32:10

+1

将''添加到类定义中意味着您实现了该协议。这并不意味着它是代表,只是它可以。你确实需要'webView.delegate = self'(或者你可以在Interface Builder中做到这一点)。 – 2010-12-15 20:53:39

+0

@Yar答案已经说过了。该评论澄清了“UIWebViewDelegate”协议和“委托”属性之间的区别。 – 2012-01-03 07:43:03

是的,在你的超级链接标签添加

target="blank" 

和一个问号将被罚款,谢谢

+4

设置'target =“blank”'或'target =“_ blank”'似乎没有效果。在iOS 4.3中,链接仍然在UIWebView内部打开。 – Palimondo 2011-09-09 22:39:32

类添加这个..

@interface yourViewController : UIViewController 
<UIWebViewDelegate> 

在视图添加这并负载

- (void)viewDidLoad 
{ 
    [description loadHTMLString:string baseURL:nil]; 
     description.delegate = self; 
} 

在.m文件添加此

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

    return YES; 
} 

注:

UIWebView *description; 
@synthesize description; 

然后,它会完美的工作方式,你应得的..! :)

+0

请务必在webView中使用V大写,如下所示: - (BOOL)webView:(UIWebView *)inWeb shouldStartLoadWithRequest:(NSURLRequest *)inRequest navigationType:(UIWebViewNavigationType)inType – dinjas 2012-12-07 23:12:12

+0

我使用UIWebView在Web上显示引号,每个报价的结束。这有助于我在Safari中打开链接,而不是在UIWebView中打开链接。 – JScarry 2014-02-13 22:52:45

现在设置的UIWebView代表的UIViewController在使用这种方法的UIWebView后检查的条件,例如web视图当前网址是google.com,如果假设您点击Gmail中url包含带有gmail的字符串。使用下面的方法打开Safari浏览器并自动加载该网址。

-(BOOL) webView:(UIWebView *)inWeb shouldStartLoadWithRequest:(NSURLRequest *)inRequest navigationType:(UIWebViewNavigationType)inType { 
    if (inType == UIWebViewNavigationTypeLinkClicked) { 
     NSURL *url = [inRequest URL]; 
     if ([[url absoluteString] rangeOfString:@"gmail"].location == NSNotFound) { 
      [[UIApplication sharedApplication] openURL:[inRequest URL]]; 
      return NO; 
     } 
    } 
    return YES; 
} 

如果你已经正确安装了UIWebViewDelegate,简单地做

self.webView loadHTMLString:_string baseURL:nil 
self.webView.delegate = self; 

应该工作

加入这一行( self.webview.delegate =自我; )

对于viewController.m中的示例

NSString *htmlFile = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"]; 
NSString* htmlString = [NSString stringWithContentsOfFile:htmlFile encoding:NSUTF8StringEncoding error:nil]; 
[self.webview loadHTMLString:htmlString baseURL:nil]; 
self.webview.delegate = self; 

Apple在iOS 9上引入了Safari视图控制器.Safari View Controller将用户期望从Safari中获得的所有功能都带到了您的应用程序中,而不必离开它。

首先,我们需要导入Safari浏览器服务

#import <SafariServices/SafariServices.h> 

客观C: -

NSString *yourUrl = @"http://yourURL"; 
SFSafariViewController *svc= [[SFSafariViewController alloc] initWithURL:[NSURL URLWithString: yourUrl]]; 
[self presentViewController:svc animated:YES completion:nil]; 

对于斯威夫特: -

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