summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Bruhin <me@the-compiler.org>2020-01-31 16:48:02 +0100
committerFlorian Bruhin <me@the-compiler.org>2020-01-31 17:00:50 +0100
commitbeaae377bf98bbaba22c39e37723c690aff275dc (patch)
tree0f812bae4c42eb67ee39c432a719a16c72b74df8
parent03b06616f46cb6c2ae125a3e328431110a21ed77 (diff)
downloadqutebrowser-beaae377bf98bbaba22c39e37723c690aff275dc.tar.gz
qutebrowser-beaae377bf98bbaba22c39e37723c690aff275dc.zip
Add additional quirk for WhatsApp Web
Fixes #5210 See #4445
-rw-r--r--doc/changelog.asciidoc1
-rw-r--r--qutebrowser/browser/webengine/webenginetab.py32
2 files changed, 33 insertions, 0 deletions
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):