diff --git a/qt/aqt/webview.py b/qt/aqt/webview.py index 675b5ec52..b5958bb36 100644 --- a/qt/aqt/webview.py +++ b/qt/aqt/webview.py @@ -4,6 +4,7 @@ import dataclasses import json import math +import re import sys from typing import Any, Callable, List, Optional, Sequence, Tuple @@ -67,14 +68,25 @@ class AnkiWebPage(QWebEnginePage): # type: ignore script.setRunsOnSubFrames(False) self.profile().scripts().insert(script) - def javaScriptConsoleMessage(self, lvl, msg, line, srcID): + def javaScriptConsoleMessage(self, level, msg, line, srcID): # not translated because console usually not visible, # and may only accept ascii text - buf = "JS error on line %(a)d: %(b)s" % dict(a=line, b=msg + "\n") + srcID = re.sub(r"(?mi).+://[^/]+", "", srcID) + if level == QWebEnginePage.InfoMessageLevel: + level = "info" + elif level == QWebEnginePage.WarningMessageLevel: + level = "warning" + elif level == QWebEnginePage.ErrorMessageLevel: + level = "error" + buf = "JS %(t)s %(f)s:%(a)d %(b)s" % dict( + t=level, a=line, f=srcID, b=msg + "\n" + ) # ensure we don't try to write characters the terminal can't handle buf = buf.encode(sys.stdout.encoding, "backslashreplace").decode( sys.stdout.encoding ) + # output to stdout because it may raise error messages on the anki GUI + # https://github.com/ankitects/anki/pull/560 sys.stdout.write(buf) def acceptNavigationRequest(self, url, navType, isMainFrame): @@ -412,7 +424,8 @@ body {{ zoom: {}; background: {}; {} }} # print(html) self.setHtml(html) - def webBundlePath(self, path: str) -> str: + @classmethod + def webBundlePath(cls, path: str) -> str: from aqt import mw if path.startswith("/"):