From beaae377bf98bbaba22c39e37723c690aff275dc Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Fri, 31 Jan 2020 16:48:02 +0100 Subject: Add additional quirk for WhatsApp Web Fixes #5210 See #4445 --- doc/changelog.asciidoc | 1 + qutebrowser/browser/webengine/webenginetab.py | 32 +++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/doc/changelog.asciidoc b/doc/changelog.asciidoc index 42095c89e..563dbca7f 100644 --- a/doc/changelog.asciidoc +++ b/doc/changelog.asciidoc @@ -60,6 +60,7 @@ Fixed especially with the new exit scheme introduced in in PyQt5 5.13.1. - Added a workaround for per-domain settings (e.g. a JavaScript whitelist) not being applied in some scenarios with Qt 5.13 and above. +- Added additional site-specific quirk for WhatsApp Web. - The `qute-pass` userscript now works correctly when a `PASSWORD_STORE_DIR` ending with a trailing slash is given. diff --git a/qutebrowser/browser/webengine/webenginetab.py b/qutebrowser/browser/webengine/webenginetab.py index 481fb113a..8b05c4dd4 100644 --- a/qutebrowser/browser/webengine/webenginetab.py +++ b/qutebrowser/browser/webengine/webenginetab.py @@ -24,6 +24,7 @@ import functools import re import html as html_utils import typing +import textwrap from PyQt5.QtCore import (pyqtSignal, pyqtSlot, Qt, QPoint, QPointF, QUrl, QTimer, QObject) @@ -985,6 +986,7 @@ class _WebEngineScripts(QObject): self._greasemonkey.scripts_reloaded.connect( self._inject_all_greasemonkey_scripts) self._inject_all_greasemonkey_scripts() + self._inject_site_specific_quirks() def _init_stylesheet(self): """Initialize custom stylesheets. @@ -1092,6 +1094,36 @@ class _WebEngineScripts(QObject): .format(new_script.name())) page_scripts.insert(new_script) + def _inject_site_specific_quirks(self): + """Add site-specific quirk scripts. + + NOTE: This isn't implemented for Qt 5.7 because of different UserScript + semantics there. We only have a quirk for WhatsApp Web right now. It + looks like that quirk isn't needed for Qt < 5.13. + """ + if not config.val.content.site_specific_quirks: + return + + # WhatsApp Web, based on: + # https://github.com/jiahaog/nativefier/issues/719#issuecomment-443809630 + script = QWebEngineScript() + script.setName('quirk-whatsapp') + script.setWorldId(QWebEngineScript.ApplicationWorld) + script.setInjectionPoint(QWebEngineScript.DocumentReady) + script.setSourceCode(textwrap.dedent(r""" + //==UserScript== + // @include https://web.whatsapp.com/ + //==/UserScript== + if (document.body.innerText.replace(/\n/g, ' ').search( + /whatsapp works with.*to use whatsapp.*update/i) !== -1) { + navigator.serviceWorker.getRegistration().then(function (r) { + r.unregister(); + document.location.reload(); + }); + } + """)) + self._widget.page().scripts().insert(script) + class WebEngineTabPrivate(browsertab.AbstractTabPrivate): -- cgit v1.2.3-54-g00ecf