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

Ios 在Safari而不是UIWebVIew中打开链接?,ios,uiwebview,Ios,Uiwebview,我有一个应用程序,在UIViewController中有一个UIWebView。我将HTML从web服务加载为如下字符串: self.webView loadHTMLString:_string baseURL:nil 是否可以在浏览器中打开此字符串中的HTML链接,而不在我的应用程序的UIWebView中打开?我该怎么做 我在“承载”UIWebVIew的UIViewController中尝试了以下方法: -(BOOL)webView:(UIWebView *)webView shouldSt

我有一个应用程序,在
UIViewController
中有一个
UIWebView
。我将HTML从web服务加载为如下字符串:

self.webView loadHTMLString:_string baseURL:nil
是否可以在浏览器中打开此字符串中的HTML链接,而不在我的应用程序的UIWebView中打开?我该怎么做

我在“承载”UIWebVIew的UIViewController中尝试了以下方法:

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


有什么想法吗?

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

target="blank"

一个问号就可以了,谢谢

您是否已将
UIWebView
的委托设置为您的
UIViewController
?就我所知,您的代码没有明显的错误,所以很可能是这样的小错误。

将此添加到类中

@interface yourViewController : UIViewController
<UIWebViewDelegate>
将其添加到.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;

然后它将以你应得的方式完美地工作…!!::)

将UIWebView的委托设置为您的UIViewController,然后使用此UIWebView方法并检查条件,例如,现在webview当前url为google.com,如果您单击gmail,则url包含gmail字符串。使用以下方法打开safari浏览器并自动加载该url

-(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=self; )

例如在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;

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

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

#import <SafariServices/SafariServices.h>
对于Swift:-

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

假设[request URL]是Safari(或iOS设备上的其他应用程序)可以处理的URL类型,那么您发布的代码应该可以工作。你们能给出一个用户会点击的URL的例子吗?是的,我发了。但我确实添加了如下内容:不确定它是否正确,但ut似乎在工作:webView.delegate=self;将此添加到类定义中是错误的吗???将
添加到类定义中只意味着您实现了协议。这并不意味着它是委托,只意味着它可以是委托。您确实需要使用
webView.delegate=self
(或者您可以在Interface Builder中这样做)。@Yar答案已经这么说了。该评论澄清了
UIWebViewDelegate
协议和
delegate
属性之间的区别。设置
target=“blank”
target=“\u blank”
似乎没有任何效果。在iOS 4.3上,UIWebView中的链接仍然是打开的。请确保在webView中大写V,如:-(BOOL)webView:(UIWebView*)inWeb中的shouldStartLoadWithRequest:(NSURLRequest*)inRequest navigationType:(UIWebViewNavigationType)InType我正在使用UIWebView显示来自web的报价,在每个报价的末尾都有指向源的链接。这对我在Safari中而不是在UIWebView中打开链接起到了作用。
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)