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

时间:2010-12-15 17:05:29

标签: ios uiwebview

我的UIWebView内有一个UIViewController的应用。我从Web服务加载HTML作为这样的字符串:

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

它似乎没有起作用......

有什么想法吗?

7 个答案:

答案 0 :(得分:23)

您是否已将UIWebView的代理人设置为UIViewController?就我所见,你的代码没有任何明显的错误,所以它很可能就像那样小。

答案 1 :(得分:21)

在课堂上添加..

@interface yourViewController : UIViewController
<UIWebViewDelegate>

在View did load

中添加
- (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;

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

答案 2 :(得分:1)

UIWebView 委托设置为 UIViewController ,之后使用此UIWebview方法并检查条件,例如现在webview当前网址是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;
}

答案 3 :(得分:0)

如果您已经正确设置了UIWebViewDelegate,只需执行

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

应该有效

答案 4 :(得分:0)

添加此行(      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;

答案 5 :(得分:0)

Apple在iOS 9上引入了Safari View Controller.Safari View Controller将用户期望的所有功能带到您的应用程序,而无需离开它。

首先我们需要导入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)

答案 6 :(得分:-3)

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

target="blank"

一个问号就可以了,谢谢