【问题标题】:iOS - UIWebView not working due to parsing erroriOS - UIWebView 由于解析错误而无法工作
【发布时间】:2012-09-13 04:03:31
【问题描述】:

我想在我的应用中播放 Youtube 视频。所以,我写了以下代码

NSString *embedHTML = @"\
<html><head>\
<style type=\"text/css\">\
body {\
background-color: transparent;\
color: white;\
}\
</style>\
</head><body style=\"margin:0\">\
<embed id=\"yt\" src=\"%@\" type=\"application/x-shockwave-flash\" \
width=\"%0.0f\" height=\"%0.0f\"></embed>\
</body></html>";

NSString* html = [NSString stringWithFormat:embedHTML, videoURL, self.view.frame.size.width, self.view.frame.size.height];  

[videoView loadHTMLString:html baseURL:nil]; 

videoView 是一个 UIWebView。这工作得很好,直到后来,视图什么也没显示。只是一个空白的白色视图。我得到了这个日志:

*** WebKit discarding exception: <NSRangeException> *** -[__NSCFString substringToIndex:]: Range or index out of bounds

【问题讨论】:

  • 我在使用 XCode 4.5、iOS 6.0 时遇到了同样的问题
  • 是的。这也是我的情况,Xcode 4.5 和 iOS 6。我正在下载 GM,希望这是一个 beta 问题

标签: iphone html ios ipad uiwebview


【解决方案1】:

用途:

http://www.youtube.com/v/XXXXXXX

代替:

http://www.youtube.com/watch?v=XXXXXXX

在这里找到:https://devforums.apple.com/message/705665#705665

【讨论】:

  • 好吧,虽然这是一个很好的解决方案,但我很难使用它。我有一个包含 300 多个 youtube 视频链接的数据库。可能与 Apple 终止与 Google 关于 YouTube 的许可有关吗?
  • Supercalifragilisticexpialidocious!
【解决方案2】:

也许我将 youtube URL 转换为正确格式的方法会对您有所帮助:

+ (NSString*)getYTUrlStr:(NSString*)url
{   
    if (url == nil)
        return nil;

    NSString *retVal = [url stringByReplacingOccurrencesOfString:@"watch?v=" withString:@"v/"];

    NSRange pos=[retVal rangeOfString:@"version"];
    if(pos.location == NSNotFound)
    {
        retVal = [retVal stringByAppendingString:@"?version=3&hl=en_EN"];
    }
    return retVal;
}

【讨论】:

  • 我也有同样的问题,但是用 V/ 替换 watch?v 可以正常工作。
  • 它在网页视图中显示缩略图,上面有播放按钮。点击时,它会在媒体播放器中播放视频。不作为嵌入式播放器播放。
【解决方案3】:

我使用以下 HTML 解决了这个问题:

<!doctype html>\
<html>\
<style>body{padding:0;margin:0;}</style>\
<iframe width=\"320\" height=\"367\" src=\"http://www.youtube.com/embed/rVd0XWALswk?rel=0\" frameborder=\"0\" allowfullscreen></iframe>\
</html>

这与使用短 URL 或 YouTube URL 无关。它可能使用了 embed 标签并使用了 application/x-shockwave-flash 类型。它现在在 iOS 6 GM 上运行良好。

【讨论】:

  • 感谢发布,我也遇到了同样的问题,能否请您发布该 html 代码的 NSString 版本?因为如果我尝试使用它,请给我一个警告“未知转义序列\
  • 你可以在 NSString 中直接使用上面的 HTML。只是不要忘记在 HTML 的开头和结尾添加“@”。
  • 很好的答案!这是我一直在寻找iOS6的解决方案!结合@Richard 提供的链接。我建议将参数 showinfo=0 添加到链接中,以隐藏 UIWebView 中更清晰视图的标题。
【解决方案4】:

由于该错误,您可能会在某个地方遇到一个数组,但在某些时候您调用的某个方法最终会尝试到达数组之外的内容。

例如,这样的代码会产生越界错误:

NSArray *array = [[NSArray alloc] initWithObjects:objInPositionZero, objInPositionOne, objInPositionTwo, nil];
NSObject *obj;

for (int i=0; i<3, i++)
{
    obj = [array objectAtIndex: (i+6)
}
//Do something with obj.

会产生 NSRangeException,因为程序试图从数组中实际不存在的索引中返回一个项目。

因此请检查所有数组并确保没有发生这种情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-09
    相关资源
    最近更新 更多