Stop media playback when the main window is closed. Issue #1646

This commit is contained in:
Maurice Parker 2020-02-27 12:15:41 -08:00
parent a465045888
commit 85bd20ca80
4 changed files with 29 additions and 0 deletions

View File

@ -56,6 +56,10 @@ final class DetailViewController: NSViewController, WKUIDelegate {
currentWebViewController = webViewController(for: mode) currentWebViewController = webViewController(for: mode)
} }
func stopMediaPlayback() {
currentWebViewController.stopMediaPlayback()
}
func canScrollDown(_ callback: @escaping (Bool) -> Void) { func canScrollDown(_ callback: @escaping (Bool) -> Void) {
currentWebViewController.canScrollDown(callback) currentWebViewController.canScrollDown(callback)
} }

View File

@ -107,6 +107,12 @@ final class DetailWebViewController: NSViewController, WKUIDelegate {
reloadHTML() reloadHTML()
} }
// MARK: Media Functions
func stopMediaPlayback() {
webView.evaluateJavaScript("stopMediaPlayback();")
}
// MARK: Scrolling // MARK: Scrolling
func canScrollDown(_ callback: @escaping (Bool) -> Void) { func canScrollDown(_ callback: @escaping (Bool) -> Void) {

View File

@ -376,6 +376,14 @@ class MainWindowController : NSWindowController, NSUserInterfaceValidations {
} }
} }
// MARK: NSWindowDelegate
extension MainWindowController: NSWindowDelegate {
func windowWillClose(_ notification: Notification) {
detailViewController?.stopMediaPlayback()
}
}
// MARK: - SidebarDelegate // MARK: - SidebarDelegate
extension MainWindowController: SidebarDelegate { extension MainWindowController: SidebarDelegate {

View File

@ -358,6 +358,17 @@ private extension ArticleRenderer {
window.webkit.messageHandlers.mouseDidExit.postMessage(anchor.href); 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();
});
}
</script> </script>
""" """