在GTK+3中滚动一个WebKit2.Webkit窗口

6
如何滚动一个 webkit2gtk 小部件?
webkitgtk(又名 webkit1)中,您可以将 WebView 包装在 ScrolledWindow 中,因此可以使用其 vadjustment 属性。
对于 wekit2gtk,在 WebView 上调用此函数只会返回 None,我也没有看到其他可调用的方法。
作为说明,我想给 webkit2 添加触摸支持。我已经通过在 WebView 小部件上添加透明层的方式进行了修改¹,但现在我检测到触摸事件后似乎无法使用它们。
¹ 今天发布的版本已经不需要顶部的图层了。尽管如此,我仍然有触摸事件,但却无法使用它们。
2个回答

8
在WebKit2中的进程分离有一些优点,但也使许多事情变得更加复杂。我认为滚动是其中之一:它发生在Web进程中,因为现在滚动条由webkit处理,而不是Gtk小部件。触摸处理也应该如此:它在Web进程中部分完成。Carlos Garcia Campos写了一篇博客文章,介绍如何使用WebKitWebExtension来帮助解决这个问题。请注意,这种设计对您的代码也有很多影响:代码的一部分将在完全不同的进程中运行。
答案的其余部分未经过测试,请将其视为一种合理的猜测。
我认为控制滚动的方法是通过DOM API,更具体地说是通过DOMDOMWindow.scroll*函数。复杂的部分是获取对DOMDOMWindow的引用 - 您需要实现一个WebExtension,该扩展将在Web进程中运行,并允许您在创建WebPage时收到通知。 WebPage.get_dom_document()调用会给您返回一个DOMDocument,而DOMDocument.get_default_view()应该会给您所需的DOMDOMWindow

关于DOM API文档,Mozilla可能比简陋的 WebKit-GTK-DOM文档更好。

如果我正在做你要做的事情,我第一站将是Freenode上的#webkitgtk+ IRC频道,以检查上述是否真的是您想要做的明智之举...


6
你可以运行一些Javascript来滚动页面。 C API 有函数webkit_web_view_run_javascript(),因此您可以将一些javascript提供给它,例如
window.scrollTo(500,0);

页面应该滚动。

1
这是在简单情况下迄今为止最容易的解决方案,因为您不需要Web扩展。一旦事情变得更加复杂并且依赖于DOM树 - Web扩展可能更容易。 - gauteh
它运行良好。喜欢这个解决方案。 - Ueda Takeyuki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接