0

我需要应用识别它是否是嵌入的 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?" @“手表?” 作为 rangeOfString,但只有youtube有效。

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

dara-url="youtube.com"(失败,仍在应用内查看)

我想知道我以错误的格式存储字符串,rangeOfString 中不支持的符号?或者可以有另一种方式,比如urlString rangeOfString:youtube && @"watch"

谢谢你,真的很感激。

4

2 回答 2

0

你当然可以使用,

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

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

于 2013-03-09T04:16:09.003 回答
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.");
}
于 2013-03-09T04:16:50.987 回答