2012-11-25 37 views
0

我想自動播放電影並在UIWebView上自動播放下一部電影。我在UIWebView上嵌入了YouTube播放器,並使用了一些YouTube Player API for iFrame片段,但效果不佳。YouTube Player的事件不適用於UIWebView

HTML在下面。

<!DOCTYPE html> 
<html> 
<head> 
<meta charset="utf-8" /> 
<style type="text/css"> 
    body { 
     background-color: #000; 
     margin: 0; 
    } 
</style> 
</head> 
<body> 
<div id="player"></div> 

<script> 
    var tag = document.createElement("script"); 
    tag.src = "http://www.youtube.com/iframe_api"; 
    var firstScriptTag = document.getElementsByTagName("script")[0]; 
    firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); 

    var player; 
    function onYouTubeIframeAPIReady() { 
    player = new YT.Player("player", { 
     height: "390", 
     width: "640", 
     videoId: "UqFvrjhbO8c", 
     events: { 
     "onReady": onPlayerReady, 
     "onStateChange": onPlayerStateChange 
     } 
    }); 
    } 

    function onPlayerReady(event) { 
    event.target.playVideo(); 
    } 

    function onPlayerStateChange(event) { 
    if (event.data == YT.PlayerState.ENDED) { 
     document.location = "api://didEndedMovie"; 
    } 
    } 
</script> 
</body> 
</html> 

當電影結束時,我想讓webview加載api://didEndedMovie。然後,WebView委託將接收加載的事件,並調用下面的委託方法。

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 

if (!_htmlTemplate) { 
    NSString *path = [[NSBundle mainBundle] pathForResource:@"YouTubePlayer" ofType:@"html"]; 
    _htmlTemplate = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil]; 
} 
NSString *htmlString = [NSString stringWithFormat:_htmlTemplate]; 
[self.webView loadHTMLString:htmlString baseURL:nil]; 
} 

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 
{ 
NSString *requestString = [[request URL] absoluteString]; 

// if delegate received requests like "api://*", this view controller 
// will not move to other views. 

if ([requestString rangeOfString:@"api://"].location == NSNotFound) { 
    return YES; 
} 

// called when the movie ended 
if ([requestString isEqualToString:@"api://didEndedMovie"]) { 
    NSLog(@"didEndedMovie"); 
} 

return NO; 
} 

但是,JavaScript不工作...不觸發的事件onReadyonStateChange

在瀏覽器上,此javascript運行良好。

爲什麼不解除事件?

回答

0

這是一個較老的問題,我不知道你是否仍然需要幫助,所以我會簡潔。

代替使用[webView loadHTMLString:baseURL],請使用[webView loadRequest]。 loadRequest方法能夠完全加載引用的YouTube iframe javascript,並且您可以與iframe api進行交互。然後你會看到onReady和onStateChange事件觸發。你也可以調用提示函數和其他東西。讓我知道如果這不能回答這個問題。

+0

當我使用[webView loadRequest]。比我的視頻不工作。 – Raju

+0

loadRequest用於加載遠程資源,而loadHTMLString用於應用程序中的本地html。 –

+0

你可以loadRequest一個本地路徑 –