检测UIWebView完成在iPad上播放YouTube视频 [英] Detecting UIWebView finish to play youtube video on iPad
问题描述
我正在使用 UIWebView
在iPad上播放YouTube视频。
I'm using UIWebView
to play YouTube videos in an iPad.
我怎样才能检测到YouTube视频已播放完毕?
我看到状态栏中的播放图标,我尝试使用 MPMusicPlayerController
通知来检测 playbackStateDidChange
,但它不起作用。
How can I detect when a YouTube video is finished playing?
I see the play icon in the status bar and I tried to use MPMusicPlayerController
notifications to detect playbackStateDidChange
, but it didn't work.
任何想法如何检测此事件?再说一遍,我说的是iPad而不是iPhone。
Any ideas how to detect this event? Again, I'm talking about iPad not iPhone.
提前致谢。
更新:
如果您使用零解决方案来检测播放结束并且还希望Youtube视频自动开始设置 UIWebView
to:
If you use zero solution to detect the end of playing and also want the Youtube video to start automatically set the UIWebView
to :
self.webView.mediaPlaybackRequiresUserAction = NO ;
我只是想澄清一下YouTube框架API:
I just want to clarify about the YouTube frame API:
重要:这是一个实验性功能,这意味着它可能会意外地改变
(08/05/2012)
"Important: This is an experimental feature, which means that it might change unexpectedly" (08/05/2012)
推荐答案
不,没有办法从 UIWebView
直接获取网页事件。但我们可以通过使用Javascript来实现这一目标。
No, there's no way to directly get web page event from UIWebView
. But we can accomplish this by using Javascript.
- 首先,您在自定义HTML中使用嵌入Javascript来检测视频结束播放事件。
- 然后您尝试使用JavaScript加载方案自定义请求,UIWebView可以捕获请求。
这些链接可能有所帮助:
These links may help:
更新示例:
在UIWebView的委托中,我把:
in UIWebView's delegate, i put:
#pragma - mark WebView Delegate
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
if ( [[[request URL] scheme] isEqualToString:@"callback"] ) {
NSLog(@"get callback");
return NO;
}
return YES;
}
网页已加载当 viewDidLoad
:
[self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"youtube" ofType:@"html" ]]]];
和youtube.html我把:
and in youtube.html i put:
<html>
<body>
<!-- 1. The <iframe> (and video player) will replace this <div> tag. -->
<div id="player"></div>
<script>
// 2. This code loads the IFrame Player API code asynchronously.
var tag = document.createElement('script');
tag.src = "http://www.youtube.com/player_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
// 3. This function creates an <iframe> (and YouTube player)
// after the API code downloads.
var player;
function onYouTubePlayerAPIReady() {
player = new YT.Player('player', {
height: '390',
width: '640',
videoId: 'u1zgFlCw8Aw',
events: {
'onReady': onPlayerReady,
'onStateChange': onPlayerStateChange
}
});
}
// 4. The API will call this function when the video player is ready.
function onPlayerReady(event) {
event.target.playVideo();
}
// 5. The API calls this function when the player's state changes.
// The function indicates that when playing a video (state=1),
// the player should play for six seconds and then stop.
var done = false;
function onPlayerStateChange(event) {
if (event.data == YT.PlayerState.PLAYING && !done) {
setTimeout(stopVideo, 6000);
done = true;
}
if (event.data == YT.PlayerState.ENDED) {
window.location = "callback:anything"; //here's the key
};
}
function stopVideo() {
player.stopVideo();
}
</script>
</body>
</html>
你可以看到我添加
if (event.data == YT.PlayerState.ENDED) {
window.location = "callback:anything";
};
到YouTube的iFrame API演示,它捕获播放器结束播放事件并尝试加载请求方案回调,然后UIWebView代表可以捕获它。
to YouTube's iFrame API demo, and it catches the player end playing event and try to load a request with scheme "callback", then the UIWebView Delegate could catch it.
您可以使用此方法使用JavaScript触发任何事件;
You can use this method to trigger any event using JavaScript;
这篇关于检测UIWebView完成在iPad上播放YouTube视频的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!