从Objective C iOS中的URL获取用户指定的信息

时间:2011-09-30 08:13:44

标签: html ios uiwebview hyperlink

目前我正在使用UIWebview来显示用户提供的Web内容。在此内容中,将链接到其他Web内容,我需要决定是在safari中还是在UIWebview中打开链接。

我目前的解决方案是在html中为网址添加一个queryString,例如<a href=http://www.w3schools.com?StayInApp target=_blank>Visit W3Schools</a>

当用户按下链接时,UIViewController中的以下方法决定如何打开链接。

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
  NSURL *url = [request URL];
  NSLog(@"%@",url);
  NSLog(@"%@",[url scheme]);
  NSLog(@"%@",[url user]);
  NSLog(@"%@",[url query]);

  if (navigationType == UIWebViewNavigationTypeLinkClicked) {


    if ([[url query]isEqualToString:@"OutOfAppApp"]) {
        NSLog(@"go out");
        [[UIApplication sharedApplication] openURL:url];

        return NO;
    }
    else if([[url query]isEqualToString:@"StayInApp"])
    {
        return YES;
    }
  }

  return YES;
}

我在Web开发方面没有太多经验,因此无法看到使用此方法的后果。这是一种有效的方法还是我应该采用其他方式?

此致

修改 我现在想出了另一种使用自定义URL方案的方法,但我仍然希望评论这是否是一个有效的解决方案:)

我在<a href=InAPP:http://www.w3schools.com target=_blank>Visit W3Schools</a>等链接中添加了前缀 当用户按下链接时,应用程序会检查前缀并决定是在应用程序中还是在Safari中启动其余网址。这是通过以下方法完成的:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
        NSURL *url = [request URL];

    if (navigationType == UIWebViewNavigationTypeLinkClicked) {

        if ([[url scheme]isEqualToString:@"InAPP"]) {
            NSLog(@"go in");
            NSURLRequest *req=[NSURLRequest requestWithURL:[self removeExtensionFromURL:url]];
            [[self browserView] loadRequest:req];
            return NO;
        }
        else if([[url scheme]isEqualToString:@"OutAPP"])
        {
             NSLog(@"go out");
           [[UIApplication sharedApplication] openURL:[self removeExtensionFromURL:url]];

            return NO;
        }
    }
    return YES;
}

    -(NSURL*)removeExtensionFromURL:(NSURL*)url
{
    NSMutableString *urlString=[NSString stringWithFormat:@"%@",url];
    NSString *newURLString;

    if ([[url scheme]isEqualToString:@"InAPP"]) {
       newURLString = [urlString stringByReplacingOccurrencesOfString:@"InAPP:" withString:@""];
    }
    else if([[url scheme]isEqualToString:@"OutAPP"])
    {
    newURLString = [urlString stringByReplacingOccurrencesOfString:@"OutAPP:" withString:@""];
    }
    return [NSURL URLWithString:newURLString];
}

0 个答案:

没有答案