我们有一个网站。在某些情况下,用户可以使用内置浏览器从Facebook应用程序或VKontakte应用程序打开。还有一个链接,我想在Safari或其他浏览器中打开。但不在此WebView中。
是否有任何HTML属性或其他东西可以告诉WebView不要自行打开此链接?
更新:我不是应用程序开发人员。我是网络开发人员。我没有任何访问Facebook应用程序的权限。我需要强制Facebook应用程序打开不在其内置浏览器中的链接。
您可以使用UIWebViewDelegate:
-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
if(UIWebViewNavigationTypeLinkClicked == navigationType /*you can add some checking whether link should be opened in Safari */) {
[[UIApplication sharedApplication] openURL:[request URL]];
return NO;
}
return YES;
}
Web视图包含一些委托方法,用于从该委托方法中查找点击事件,您需要调用类似的URL
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"www.google.com"]];
这是在点击网页视图内的任何链接时会触发的委托方法
-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
if (navigationType == UIWebViewNavigationTypeLinkClicked) {
{
[[UIApplication sharedApplication] openURL:[request URL]];
}
}
只需将URL与URLRequest区分开来。
如果设置了UIWebViewDelegate
,则可以使用方法
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;
使用这种方法,我们可以阻止或允许在UIWebView
或移动浏览器中打开某些链接/URL。
所以我们可以做一些类似的事情
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
// We only want to block links
if(navigationType == UIWebViewNavigationTypeLinkClicked) {
NSString *url = [[request URL] absoluteString];
if([url isEqualToString:@"http://www.google.co.uk"]) {
// If the requested url is a link and is http://www.google.co.uk block it from loading in the UIWebView and load it in the mobile browser.
if([[UIApplication sharedApplication] canOpenUrl:[request URL]]) {
// We should be checking to make sure we can open it first, for whatever reason we might not be able to and we don't want to give the user a bad journey.
[[UIApplication sharedApplication] openURL:[request URL]];
// We also need to tell our UIWebView not to do anything so we need to return NO.
return NO;
}
}
}
// If all is OK and we are happy for any other link to be included then just return YES and continue.
return YES;
}
如果您想阻止所有链接,那么只需删除isEqualToString:
if statement
,或者您可以通过将else if
添加到if statement
来阻止某些链接。这段代码做两件事中的一件——要么在UIWebView
中加载点击的链接网站,要么在通过if statements
时在移动浏览器中加载网站。
更新
事实证明,用户并没有做他们正在做的html
中没有的objective-c
方面的事情,但由于这可以在未来帮助用户,我将在这里留下我的答案。
编辑
由于用户正在使用html
尝试将用户引导到移动浏览器,因此他们正在寻找的内容被称为URL方案。不幸的是,我不相信iOS 7
有任何URL方案可以打开safari移动浏览器。这个问题以前已经问过了,所以我不会坐在这里再说一遍,我只会引导您从WebView 中的链接中找到问题并回答Open Mobile Safari
//codigo para abrir no safari
-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType; {
NSURL *requestURL =[ [ request URL ] retain ];
if ( ( [ [ requestURL scheme ] isEqualToString: @”http” ] || [ [ requestURL scheme ] isEqualToString: @”https” ] || [ [ requestURL scheme ] isEqualToString: @”mailto” ])&& ( navigationType == UIWebViewNavigationTypeLinkClicked ) )
{ return ![ [ UIApplication sharedApplication ] openURL: [ requestURL autorelease ] ]; } [ requestURL release ]; return YES;
}