在Safari中打开链接而不是UIWebVIew?
我有一个应用程序UIWebView
内UIViewController
。我从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;
}
它似乎并不奏效....
任何想法?
有你的UIWebView
的委托设置为您UIViewController
?就我所见,代码没有任何明显的错误,所以它可能会是这样的小事。
是的,我做到了。
将'
@Yar答案已经说过了。该评论澄清了“UIWebViewDelegate”协议和“委托”属性之间的区别。 – 2012-01-03 07:43:03
是的,在你的超级链接标签添加
target="blank"
和一个问号将被罚款,谢谢
设置'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;
然后,它会完美的工作方式,你应得的..! :)
现在设置的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)
你张贴应该工作的代码,假设[请求URL]是Safari(或iOS设备上的其他应用程序)可以处理的一种URL。你能发布一个用户可以点击的网址的例子吗? – Greg 2010-12-15 17:14:03