【问题标题】:Notify end of play from Objective C to Javascript WKWebkit AVPlayer通知从 Objective C 到 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 方面,我需要“等待”音频结束以进行预期的操作过程

如果您需要更多信息,请告诉我。

提前致谢。

【问题讨论】:

    标签: javascript ios objective-c audio wkwebview


    【解决方案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];
    }
    

    【讨论】:

      猜你喜欢
      • 2011-05-25
      • 1970-01-01
      • 2011-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多