You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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视频标签:

  1. 配置WKWebView的WKWebViewConfiguration:
    let config = WKWebViewConfiguration()
    config.allowsInlineMediaPlayback = true
    config.mediaTypesRequiringUserActionForPlayback = [] // 可选,允许视频自动播放
    let webView = WKWebView(frame: .zero, configuration: config)
    
  2. 在HTML的video标签中添加playsinline和webkit-playsinline属性:
    <video src="your-video-url" playsinline webkit-playsinline controls></video>
    

配置完成后,视频会直接在WebView内播放,不会唤起原生全屏播放器,后续隐藏WebView时视频也会随之停止。

内容的提问来源于stack exchange,提问作者BenSef

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 16:57:04