diff --git a/qutebrowser/browser/webengine/webenginetab.py b/qutebrowser/browser/webengine/webenginetab.py index c9dd20717..93e1275d9 100644 --- a/qutebrowser/browser/webengine/webenginetab.py +++ b/qutebrowser/browser/webengine/webenginetab.py @@ -235,11 +235,11 @@ class WebEngineScroller(browsertab.AbstractScroller): self._tab.run_js_async(js_code) def to_point(self, point): - self._tab.run_js_async("window.scroll({x}, {y});".format( - x=point.x(), y=point.y())) + js_code = javascript.assemble('window', 'scroll', point.x(), point.y()) + self._tab.run_js_async(js_code) def delta(self, x=0, y=0): - self._tab.run_js_async("window.scrollBy({x}, {y});".format(x=x, y=y)) + self._tab.run_js_async(javascript.assemble('window', 'scrollBy', x, y)) def delta_page(self, x=0, y=0): js_code = javascript.assemble('scroll', 'delta_page', x, y) diff --git a/qutebrowser/utils/javascript.py b/qutebrowser/utils/javascript.py index 9f7372758..4eaf63cd0 100644 --- a/qutebrowser/utils/javascript.py +++ b/qutebrowser/utils/javascript.py @@ -62,6 +62,9 @@ def _convert_js_arg(arg): def assemble(module, function, *args): """Assemble a javascript file and a function call.""" js_args = ', '.join(_convert_js_arg(arg) for arg in args) - code = '"use strict";\nwindow._qutebrowser.{}.{}({});'.format( - module, function, js_args) + if module == 'window': + parts = ['window', function] + else: + parts = ['window', '_qutebrowser', module, function] + code = '"use strict";\n{}({});'.format('.'.join(parts), js_args) return code diff --git a/tests/unit/utils/test_javascript.py b/tests/unit/utils/test_javascript.py index 50fd4e91e..f7ff7da53 100644 --- a/tests/unit/utils/test_javascript.py +++ b/tests/unit/utils/test_javascript.py @@ -138,6 +138,10 @@ def test_convert_js_arg(arg, expected): assert javascript._convert_js_arg(arg) == expected -def test_assemble(): - expected = '"use strict";\nwindow._qutebrowser.foo.func(23);' - assert javascript.assemble('foo', 'func', 23) == expected +@pytest.mark.parametrize('base, expected_base', [ + ('window', 'window'), + ('foo', 'window._qutebrowser.foo'), +]) +def test_assemble(base, expected_base): + expected = '"use strict";\n{}.func(23);'.format(expected_base) + assert javascript.assemble(base, 'func', 23) == expected