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)
}
func stopMediaPlayback() {
currentWebViewController.stopMediaPlayback()
}
func canScrollDown(_ callback: @escaping (Bool) -> Void) {
currentWebViewController.canScrollDown(callback)
}

View File

@ -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) {

View File

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

View File

@ -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();
});
}
</script>
"""