From 2db839db98215c827fefaadbe88f665d157eb352 Mon Sep 17 00:00:00 2001 From: Maurice Parker Date: Sat, 21 Sep 2019 15:59:51 -0500 Subject: [PATCH] Prevent videos on iOS from autoplaying in fullscreen --- Shared/Article Rendering/main.js | 7 +++++++ iOS/Detail/DetailViewControllerWebViewProvider.swift | 11 ++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/Shared/Article Rendering/main.js b/Shared/Article Rendering/main.js index e33d725da..6730a6ea0 100644 --- a/Shared/Article Rendering/main.js +++ b/Shared/Article Rendering/main.js @@ -28,6 +28,12 @@ function linkHover() { } } +function inlineVideos() { + document.querySelectorAll("video").forEach(element => { + element.setAttribute("playsinline", true) + }); +} + function error() { document.body.innerHTML = "error"; } @@ -40,4 +46,5 @@ function render(data) { wrapFrames() stripStyles() linkHover() + inlineVideos() } diff --git a/iOS/Detail/DetailViewControllerWebViewProvider.swift b/iOS/Detail/DetailViewControllerWebViewProvider.swift index 35bf79b04..58c1d7fdf 100644 --- a/iOS/Detail/DetailViewControllerWebViewProvider.swift +++ b/iOS/Detail/DetailViewControllerWebViewProvider.swift @@ -63,7 +63,16 @@ class DetailViewControllerWebViewProvider: NSObject, WKNavigationDelegate { private func replenishQueueIfNeeded() { while queue.count < minimumQueueDepth { - let webView = WKWebView(frame: .zero) + let preferences = WKPreferences() + preferences.javaScriptCanOpenWindowsAutomatically = false + preferences.javaScriptEnabled = true + + let configuration = WKWebViewConfiguration() + configuration.preferences = preferences + configuration.allowsInlineMediaPlayback = true + configuration.mediaTypesRequiringUserActionForPlayback = .video + + let webView = WKWebView(frame: .zero, configuration: configuration) enqueueWebView(webView) } }