UIWebView加载请求白色屏幕



我想我已经涵盖了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;英寸小时我尝试过实现这样的方法

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error

但没有显示任何错误。

任何建议都将不胜感激。

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

当您一次又一次地重新创建UIWebView时,我看到了一些奇怪之处。与其这样做,不如尝试调用JavaScript函数loadVideoById()?要从Objective-C实现这一点,您可以调用:

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

为了让iframe播放器更容易嵌入iOS应用程序,我们最近发布了一个助手库,您可以通过CocoaPods安装该库。看看吧。我们的建议之一是,如果可以的话,不要一遍又一遍地重新创建UIWebView。

您持有一个对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
}

最新更新