UIWebView loadRequest白屏

时间:2014-04-12 15:35:03

标签: javascript uiwebview youtube-api

我想我已经涵盖了stackoverflow中的大多数(如果不是全部)相关帖子。不幸的是我仍然无法找到答案。

基本上,我的应用包含一个UIWebview,可以通过(YouTube JS API)自动播放youtube视频

[webView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"YT_Player" ofType:@"html"] isDirectory:NO]]];

每x分钟调用包含这行代码的函数,其中x来自数据库。这是由

完成的
[self performSelector:@selector(resetVideo) withObject:self afterDelay:x];

整个功能是这样的:

-(void) resetVideo {
    [webView removeFromSuperview];
    webView.delegate = nil;
    [webView stopLoading];
    [webView release];
    webView = [[UIWebView alloc] initWithFrame:CGRectMake(12, 20, 300, 200)];
    webView.delegate = self;
    webView.userInteractionEnabled = NO;
    webView.allowsInlineMediaPlayback = YES;
    [webView setMediaPlaybackRequiresUserAction:NO];

    [webView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"YT_Player" ofType:@"html"] isDirectory:NO]]];

    [self.view addSubview:webView];    
}

另外,在webViewDidFinishLoad:

- (void)webViewDidFinishLoad:(UIWebView *)webView{
    //call the javascript in YT_Player.html to set the video code, which comes 
    from the db as well
    // done by using   stringByEvaluatingJavaScriptFromString:scriptStr
}

当应用程序启动时,它总是播放youtube视频,然后当下一个视频尝试出现时,它只是在UIWebView区域显示为白色屏幕。此外,在我看来,这个问题只存在于真实设备中(而不是模拟器上)。

更多信息: 我定义了UIWebView * webView;在.h 我尝试实现像

这样的方法
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error

但没有显示错误。

非常感谢任何建议。

编辑:经过进一步调查后,问题可能是由于没有触发onPlayerReady()事件。

2 个答案:

答案 0 :(得分:0)

当你一遍又一遍地重新创建一个UIWebView时,我看到了一些奇怪的东西。而不是这样做,而是尝试拨打JavaScript function loadVideoById()呢?要从Objective-C执行此操作,您可以调用:

[webView stringByEvaluatingJavaScriptFromString:"loadVideoById('kt2n27-pi_s')"];

为了在iOS应用中更轻松地嵌入iframe播放器,我们最近发布了helper library that you can install via CocoaPods。看看这个。我们提出的建议之一是,如果可以的话,不要一遍又一遍地重新创建UIWebView。

答案 1 :(得分:0)

您持有对webView对象的强引用,然后您从superView中删除该对象,因此白屏。您可以根据需要创建webView对象,而不是从超级视图中删除它,而不是保留强引用,您可以将其切换为隐藏& userInteractionEnabled属性。

没有强有力的参考:

 - (void)resetVideo {
    for (id_object in self.view.subview) {
        if ([id_object isMemberOfClass: [UIWebView class]]) {
            id_object = nil;
            [id_object removeFromSuperView];
        }
    }

    UIWebView* oWebView = [[UIWebView alloc] initWithFrame:CGRectMake(12, 20, 300, 200)];


    // .. finish as you have above
}