WKWebView видео не воспроизводится inline - PullRequest
0 голосов
/ 17 октября 2019

Итак, в соответствии с документацией Apple: 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")! ))
    }

Что я делаю не так?

1 Ответ

1 голос
/ 21 октября 2019

Рассматривая некоторые другие проблемы, о которых сообщали люди, и подробности в документации Apple, я думаю, что проблема заключается в том, что WKWebViewConfiguration необходимо настроить до создания WKWebView.

Из документации Apple:

Используя класс WKWebViewConfiguration, вы можете определить, как скоро будет отображаться веб-страница, как обрабатывается воспроизведение мультимедиа, гранулярность элементов, которые может выбрать пользователь, и многие другие параметры.

WKWebViewConfigurationиспользуется только при первой инициализации веб-представления. Вы не можете использовать этот класс для изменения конфигурации веб-представления после того, как оно было создано.

Это соответствует примеру, который Apple предоставляет для использования 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)
    }}

Казалось бы, имеет больше смысла, если свойство не может быть установлено впоследствии, чтобы избежать этогопутаница, но из документации видно, что так оно и есть.

...