通知从 Objective C 到 Javascript WKWebkit AVPlayer 的播放结束
Posted
技术标签:
【中文标题】通知从 Objective C 到 Javascript WKWebkit AVPlayer 的播放结束【英文标题】:Notify end of play from Objective C to Javascript WKWebkit AVPlayer 【发布时间】:2018-01-15 08:46:46 【问题描述】:当我的音频播放完毕后,我正在尝试从 ObjC 向 javascript 传递通知。
我目前调用 Obj C 来播放音频(来自 JS):
window.webkit.messageHandlers.playLetter.postMessage(audiosrc);
在 ObjC 方面,我有以下方法:
- (void) userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)scriptMessage
if([scriptMessage.name isEqualToString:@“playLetter”])
_contentAudioPlayer = [[AVPlayer alloc] initWithURL:[NSURL URLWithString:scriptMessage.body]];
[_contentAudioPlayer play];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playerItemDidReachEnd) name:AVPlayerItemDidPlayToEndTimeNotification object:_contentAudioPlayer.currentItem];
当音频结束播放时通知中心会调用此方法:
- (void) playerItemDidReachEnd
NSLog(@"audio ended");
每次音频结束即为成功。
我的问题是:
如何通知我的 JavaScript 音频已结束?在 JS 方面,我需要“等待”音频结束以进行预期的操作过程
如果您需要更多信息,请告诉我。
提前致谢。
【问题讨论】:
【参考方案1】:我在应用程序的 JavaScript 端创建了一个自定义事件,并在 playerItemDidReachEnd
方法中使用来自 webView
的 evaluateJavaScript
分派了该事件:
- (void) playerItemDidReachEnd
[_webView evaluateJavaScript:
@“var event = new CustomEvent(‘letterplayed’, \n”
@” detail: \n”
@” message: ‘letter audio had finished playing’,\n”
@” time: new Date(),\n”
@” ,\n”
@” bubbles: true,\n”
@” cancelable: true\n”
@“);\n”
@“window.dispatchEvent(event);”
completionHandler:nil];
【讨论】:
以上是关于通知从 Objective C 到 Javascript WKWebkit AVPlayer 的播放结束的主要内容,如果未能解决你的问题,请参考以下文章
跟踪 iphone 的位置并通知是不是在 ios Objective C 中越过某些公里
未使用 firebase 和 Objective C 接收推送通知