Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/109.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 从目标C iOS中的URL获取用户指定的信息_Html_Ios_Uiwebview_Hyperlink - Fatal编程技术网

Html 从目标C iOS中的URL获取用户指定的信息

Html 从目标C iOS中的URL获取用户指定的信息,html,ios,uiwebview,hyperlink,Html,Ios,Uiwebview,Hyperlink,目前我正在使用UIWebview,它显示用户提供的web内容。在此内容中将有指向其他web内容的链接,我需要决定是在safari中还是在UIWebview中打开链接 我目前的解决方案是在html中的URL中添加查询字符串,例如 当用户按下链接时,UIViewController中的以下方法决定如何打开链接 - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigati

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

我目前的解决方案是在html中的URL中添加查询字符串,例如

当用户按下链接时,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方案的方法,但我仍然希望对这是否是一种有效的解决方案发表评论:)

我在链接中添加了前缀,如
当用户按下链接时,应用程序会检查前缀并决定是在应用程序中还是在safari中启动url的其余部分。这是通过以下方法完成的:

- (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];
}

是否可以为此使用自定义URL方案?请看,我需要至少两种不同的方案来决定是在应用程序中还是在safari中,所以我不相信这是实现目标的方法。实际上,我现在正在使用的方案是,我将InAPP附加到链接,例如target=_blank>访问W3Schools。用户按下链接后,应用程序会根据方案决定要做什么。