WKWebView 视频不内联播放

Mat*_*ios 1 embed video inline wkwebview swift4

所以根据苹果的文档:https : //developer.apple.com/documentation/webkit/wkwebviewconfiguration/1614793-allowsinlinemediaplayback

我应该能够使用 Swift 4 轻松地在线播放视频,但无论我做什么,它总是会在本机视频播放器中打开视频。

这是我的代码:

convenience init(style: UITableViewCell.CellStyle, reuseIdentifier: String?, url: String = "", title: String) {
        self.init(style: style, reuseIdentifier: reuseIdentifier)
        self.videoTitleLabel.text = title
        self.urlToVideo = url
        setUpUI()
        setUpLayout()
        webView.backgroundColor = .smalt
        webView.translatesAutoresizingMaskIntoConstraints = false
        webView.configuration.allowsInlineMediaPlayback = true
        webView.configuration.preferences.javaScriptEnabled = true
        webView.load(URLRequest(url: URL(string: self.urlToVideo + "?playsinline")! ))
    }
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Mic*_*ick 8

通过查看人们报告的其他一些问题以及 Apple 文档中的详细信息,我认为问题在于必须在创建 WKWebView 之前设置 WKWebViewConfiguration。

从苹果文档:

使用 WKWebViewConfiguration 类,您可以确定网页的呈现速度、媒体播放的处理方式、用户可以选择的项目的粒度以及许多其他选项。

WKWebViewConfiguration 仅在首次初始化 Web 视图时使用。创建后,您不能使用此类更改 Web 视图的配置。

这与苹果提供的使用 WKWebView ( https://developer.apple.com/documentation/webkit/wkwebview )的示例一致,您可以在其中看到 WKWebViewConfiguration 被传递给 WKWebView 设置。我已经在 playsinline 中添加了作为您案例的示例。

import UIKit
import WebKit
class ViewController: UIViewController, WKUIDelegate {
    
    var webView: WKWebView!
    
    override func loadView() {
        let webConfiguration = WKWebViewConfiguration()
        webConfiguration.allowsInlineMediaPlayback = true //** Added as an example for your case
        webView = WKWebView(frame: .zero, configuration: webConfiguration)
        webView.uiDelegate = self
        view = webView
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let myURL = URL(string:"https://www.apple.com")
        let myRequest = URLRequest(url: myURL!)
        webView.load(myRequest)
    }}
Run Code Online (Sandbox Code Playgroud)

如果随后无法设置该属性以避免这种混淆,这似乎更有意义,但从文档中可以看出这是它的工作原理。