如何检测 WKWebView 正在关闭,来自 javascript

Posted

技术标签:

【中文标题】如何检测 WKWebView 正在关闭,来自 javascript【英文标题】:How to detect WKWebView is being closed, from javascript 【发布时间】:2017-05-18 19:46:43 【问题描述】:

我们使用在 ios 上的 WKWebView 对象中运行的 javascript 播放流式音频。如果该 WKWebView 被破坏或不再显示,音频通常会继续播放到完成。用户停止音频的唯一方法是向上滑动以获取锁定屏幕播放控件并点击“暂停”。

有没有办法通知 WKWebView 中的 javascript 即将关闭,以便在 WKWebView 被销毁之前停止播放音频?

我尝试挂接到“pagehide”、“unload”、“beforeunload”和“visibilitychange”事件,但没有成功。

我确信可以从本机代码触发自定义事件,但我无法控制这方面的事情。还有什么好办法吗?

【问题讨论】:

【参考方案1】:

这个错误显然已在 iOS 8.3+ 中得到修复,但在视图消失时加载空白页面的建议答案效果很好,如果支持在旧操作系统版本上运行的应用程序,它可能会很有用。这种方法也比依靠在 WKWebView 中运行的每个 JS 实现在收到 Web 视图即将“关闭”的通知后停止其自己的媒体播放更具弹性:

在您的 WKWebView 视图控制器类的 -(void)viewDidDisappear:(BOOL)animated 方法中,运行以下代码以将空白页面加载到您的 Web 视图中。该代码假定您对 Web 视图的引用是 self.webView,因此根据需要进行修改。

// fix to prevent embedded audio/video from playing once the view has closed... [self.webView loadhtmlString:@"<html/>" baseURL:nil];

更多详情请见WKWebView embed video keeps playing sound after release...

【讨论】:

以上是关于如何检测 WKWebView 正在关闭,来自 javascript的主要内容,如果未能解决你的问题,请参考以下文章

来自 WKWebview 的 iCLoud 文档选择器关闭容器视图

如何检测在 WKWebView 中播放的电影?

如何检测 amp 页面的 url 何时随 WKWebview 更改

如何在 WKWebView 中检测视频播放器的播放/暂停事件?

在 iOS 中,当用户滚动浏览 WKWebView 时,如何检测屏幕上可见的 html 元素?

如何使用 iOS WKWebView 注入 JavaScript 回调来检测 onclick 事件?