通知从 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 方法中使用来自 webViewevaluateJavaScript 分派了该事件:

- (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 的播放结束的主要内容,如果未能解决你的问题,请参考以下文章

Objective C-推送通知不适用于 Cloudkit

跟踪 iphone 的位置并通知是不是在 ios Objective C 中越过某些公里

未使用 firebase 和 Objective C 接收推送通知

Objective-C:从本地通知打开 URL

当应用程序在objective.c中终止时,我可以处理“静默通知”吗? [关闭]

如何在 ios Objective c 中检查推送通知是不是在后台模式下接收?