diff --git a/Mac/MainWindow/Detail/DetailViewController.swift b/Mac/MainWindow/Detail/DetailViewController.swift index c1d26e512..1b0200949 100644 --- a/Mac/MainWindow/Detail/DetailViewController.swift +++ b/Mac/MainWindow/Detail/DetailViewController.swift @@ -56,6 +56,10 @@ final class DetailViewController: NSViewController, WKUIDelegate { currentWebViewController = webViewController(for: mode) } + func stopMediaPlayback() { + currentWebViewController.stopMediaPlayback() + } + func canScrollDown(_ callback: @escaping (Bool) -> Void) { currentWebViewController.canScrollDown(callback) } diff --git a/Mac/MainWindow/Detail/DetailWebViewController.swift b/Mac/MainWindow/Detail/DetailWebViewController.swift index bd913e5cc..e901a2a7c 100644 --- a/Mac/MainWindow/Detail/DetailWebViewController.swift +++ b/Mac/MainWindow/Detail/DetailWebViewController.swift @@ -107,6 +107,12 @@ final class DetailWebViewController: NSViewController, WKUIDelegate { reloadHTML() } + // MARK: Media Functions + + func stopMediaPlayback() { + webView.evaluateJavaScript("stopMediaPlayback();") + } + // MARK: Scrolling func canScrollDown(_ callback: @escaping (Bool) -> Void) { diff --git a/Mac/MainWindow/MainWindowController.swift b/Mac/MainWindow/MainWindowController.swift index bc00c98d1..4bdab6f89 100644 --- a/Mac/MainWindow/MainWindowController.swift +++ b/Mac/MainWindow/MainWindowController.swift @@ -376,6 +376,14 @@ class MainWindowController : NSWindowController, NSUserInterfaceValidations { } } +// MARK: NSWindowDelegate + +extension MainWindowController: NSWindowDelegate { + func windowWillClose(_ notification: Notification) { + detailViewController?.stopMediaPlayback() + } +} + // MARK: - SidebarDelegate extension MainWindowController: SidebarDelegate { diff --git a/Shared/Article Rendering/ArticleRenderer.swift b/Shared/Article Rendering/ArticleRenderer.swift index b849ba206..56f5fd97f 100644 --- a/Shared/Article Rendering/ArticleRenderer.swift +++ b/Shared/Article Rendering/ArticleRenderer.swift @@ -358,6 +358,17 @@ private extension ArticleRenderer { window.webkit.messageHandlers.mouseDidExit.postMessage(anchor.href); } + function stopMediaPlayback() { + document.querySelectorAll("iframe").forEach(element => { + var iframeSrc = element.src; + element.src = iframeSrc; + }); + + document.querySelectorAll("video, audio").forEach(element => { + element.pause(); + }); + } + """