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)