尝试使用rangeOfString为youtube视频表现网址

时间:2013-03-09 03:13:45

标签: ios objective-c string webview nsstring

我需要该应用识别它是否是一个youtube视频嵌入,然后在应用内webView

以下是我现在使用的代码:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;
{
NSString *urlString = request.URL.absoluteString;
NSString *youtube;

youtube = @"youtube";

if ([urlString rangeOfString:youtube options: NSCaseInsensitiveSearch].location != NSNotFound){
    return YES;
}
[[UIApplication sharedApplication] openURL:request.URL];
return NO;
}

这在大多数情况下都有效,因为大多数YouTube链接都是作为嵌入式视频直接传输到网页上的。但是,我检查是否从youtube选择了个人资料页面或其他人,这仍然会在应用程序中打开,因为我的应用程序没有后退按钮(html页面中的按钮)。因此,任何不属于视频的链接都将无法返回。 我尝试使用 @“youtube.com/watch” @“/ watch?” @“watch?”作为rangeOfString,但仅限 youtube 有效。

例如: 这是一个YouTube视频网址:data-url =“http://youtube.com/watch?feature=player_detailpage&v=Ke1Y3P9D0Bc”(应用内视图好)

dara-url =“youtube.com”(失败,仍然在应用内视图)

我想知道我是否存储了错误格式的字符串,而rangeOfString中不支持符号? 或者可以采用其他方式,例如urlString rangeOfString:youtube && @"watch"

谢谢你,真的很感激。

2 个答案:

答案 0 :(得分:0)

你当然可以使用,

if ([urlString rangeOfString:youtube options: NSCaseInsensitiveSearch].location != NSNotFound && [urlString rangeOfString:@"watch" options: NSCaseInsensitiveSearch].location != NSNotFound)

这是否会让你得到你想要的东西,我不知道,但它应该作为一个有效的if语句。

答案 1 :(得分:0)

NSURL *myURL = [NSURL URLWithString:@"http://www.youtube.com/watch?feature=player_detailpage&v=Ke1Y3P9D0Bc"];
NSString *host = myURL.host;
NSString *path = myURL.path;
NSLog(@"%@", host); // Output: www.youtube.com
NSLog(@"%@", path); // Output: /watch
NSLog(@"%@", myURL.query); // Output: feature=player_detailpage&v=Ke1Y3P9D0Bc
if (NSMaxRange([host rangeOfString:@"youtube.com" options:(NSCaseInsensitiveSearch|NSBackwardsSearch)]) == host.length &&
    [path.lowercaseString isEqualToString:@"/watch"]) {
    NSLog(@"This is a youtube video.");
}