iOS WKWebView视频播放问题:关闭WebView后原生播放器仍显示
解决WKWebView视频播放后原生播放器残留的问题
方案一:关闭WebView时停止原生播放器
在点击取消按钮隐藏WebView前,先执行以下操作终止媒体播放:
- 调用WKWebView的
evaluateJavaScript(_:completionHandler:)方法,通过JS暂停所有视频并重置进度:webView.evaluateJavaScript("document.querySelectorAll('video').forEach(video => { video.pause(); video.currentTime = 0; })") { _, error in if let error = error { print("暂停视频失败:\(error.localizedDescription)") } } - 执行完JS后再隐藏WebView,也可以额外调用
webView.stopLoading()终止加载,或直接将WebView从父视图移除(若后续不再复用)。
如果视频处于原生全屏状态,还可以通过监听UIWindow.didBecomeHiddenNotification通知,在WebView所在窗口隐藏时触发暂停;或者调用webView.loadHTMLString("", baseURL: nil)清空WebView内容,强制终止所有媒体进程。
方案二:禁用原生播放器,强制使用WebView内联播放
要让视频始终在WebView内部播放,不唤起原生全屏播放器,需要同时配置WebView和HTML视频标签:
- 配置WKWebView的
WKWebViewConfiguration:let config = WKWebViewConfiguration() config.allowsInlineMediaPlayback = true config.mediaTypesRequiringUserActionForPlayback = [] // 可选,允许视频自动播放 let webView = WKWebView(frame: .zero, configuration: config) - 在HTML的video标签中添加
playsinline和webkit-playsinline属性:<video src="your-video-url" playsinline webkit-playsinline controls></video>
配置完成后,视频会直接在WebView内播放,不会唤起原生全屏播放器,后续隐藏WebView时视频也会随之停止。
内容的提问来源于stack exchange,提问作者BenSef
相关产品推荐
相关产品推荐

