在Safari中打开链接而不是UIWebVIew?
我有一个UIWebView
在UIViewController
内的应用程序。 我从Web服务中加载HTML,如下所示:
self.webView loadHTMLString:_string baseURL:nil
这个string中的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; }
它似乎没有工作….
有任何想法吗?
你有没有设置UIWebView
的委托给你的UIViewController
? 就我所见,代码没有任何明显的错误,所以它可能是这样的小事。
在课堂上添加
@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;
那么它将完美的工作方式,你应得的..! 🙂
设置UIWebView的委托给你的UIViewController后,使用这个UIWebview方法,并检查条件,例如现在webview当前url是google.com,如果你点击gmail的url包含string与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;
应该pipe用
添加这一行(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;
Apple在iOS 9上引入了Safari View Controller。Safari View Controller将用户所期望的所有function都带到您的应用程序中,而无需离开它。
首先,我们需要导入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];
对于Swift: –
let svc = SFSafariViewController(URL: NSURL(string: self.urlString)!) self.presentViewController(svc, animated: true, completion: nil)
是的,在你的超链接标签添加
target="blank"
还有一个问号会好的,谢谢