转载自: http://iloss.me/post/kai-fa/2014-09-18-uiwebview-video-fullscreen
场景是这样的
在UIWebview里面有一个视频,点击之后会弹出全屏的系统的视频播放器,这时候你可能需要在全屏的时候,或者在用户看完视频的时候需要做一些事情。
那首先我们想到的是可以得到一个通知,是的,的确我们可以得到通知,通过下面这2个:
UIMoviePlayerControllerDidEnterFullscreenNotification
UIMoviePlayerControllerDidEnterFullscreenNotification
我们通过下面的代码来注册通知
NSNotificationCenter *defaultCenter = [NSNotificationCenter defaultCenter];
[defaultCenter addObserver:self selector:@selector(didEnterFullScreen:)
name:@"UIMoviePlayerControllerDidEnterFullscreenNotification"
object:nil];
[defaultCenter addObserver:self
selector:@selector(didExitFullScreen:)
name:@"UIMoviePlayerControllerDidExitFullscreenNotification"
object:nil];
但是这个通知目前来看有2个问题:
- 这个通知没有在官方文档中描述,不排除会被拒。
- ios8之后这个通知也没有作用了
视频标签的解决方案
首先注明,我也是在网上找的解决方案,js这个方案是看到一个日本人写的,文章最后会给出原文连接。
通过JavaScript钩子来获取
videofullscreenhandler.js
(function () {
var scheme = 'videohandler://';
var videos = document.getElementsByTagName('video');
for (var i = 0; i < videos.length; i++) {
videos[i].addEventListener('webkitbeginfullscreen', onBeginFullScreen, false);
videos[i].addEventListener('webkitendfullscreen', onEndFullScreen, false);
}
function onBeginFullScreen() {
window.location = scheme + 'video-beginfullscreen';
}
function onEndFullScreen() {
window.location = scheme + 'video-endfullscreen';
}
})();
在UIWebview的delegate里面做处理
#pragma mark - UIWebViewDelegate
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
NSString *videoHandlerString =
[[NSBundle mainBundle] myVideoFullScreenHandlerJavaScriptString];
if (videoHandlerString) {
[webView stringByEvaluatingJavaScriptFromString:videoHandlerString];
}
}
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request
navigationType:(UIWebViewNavigationType)navigationType
{
if ([request.URL.scheme isEqualToString:VideoHandlerScheme]) {
NSLog(@"%@", request.URL);//在这里可以获得事件
return NO;
}
return YES;
}
参考连接:http://dev.classmethod.jp/client-side/javascript/uiwebview-video-tag/