6

如何滚动一个webkit2gtk小部件?

webkitgtk(又名webkit1)中,您将您的包装WebView在 a 中ScrolledWindow,因此可以使用它vadjustment属性。

对于wekit2gtk, 这个调用WebView只是返回None,我看不到其他方法可以调用。

作为解释,我想在webkit2. 我通过在小部件上添加一个透明层来破解WebView了这一点¹,但现在我检测到我似乎无法使用它们的触摸。

¹ 今天发布的版本消除了对顶层层的需求。然而,我有接触,但我无能为力。

4

2 回答 2

8

WebKit2 中的进程分离有一些优势,但也让很多事情变得更加复杂。我相信滚动是其中之一:它发生在 web 进程中,因为滚动条现在由 webkit 处理,而不是 Gtk 小部件。触摸处理也是如此:它部分是在 Web 进程中完成的。Carlos Garcia Campos 写了一篇关于使用 WebKitWebExtension 来帮助解决这个问题的博客文章。请注意,该设计对您的代码也有很多影响:部分代码将在完全不同的进程中运行。

其余答案未经测试,请将此视为有根据的猜测:

我相信控制滚动的方法是通过DOM API,更具体地说是DOMDOMWindow.scroll*函数。复杂的部分是获取对的引用DOMDOMWindow——您需要实现WebExtension将在 Web 进程中运行的 a,并允许您在WebPage创建 a 时收到通知。WebPage.get_dom_document()电话给你一个DOMDocument,然后DOMDocument.get_default_view()应该给你DOMDOMWindow你需要的。

对于 DOM API 文档,Mozilla可能是比 spartan WebKit-GTK-DOM 文档更好的参考。

如果我正在做你想做的事,我的第一站将是 Freenode 上的#webkitgtk+ IRC 频道,以检查上述是否真的是做你想做的事的一种理智的方式......

于 2014-02-18T21:59:39.580 回答
5

您可以运行一些 javascript 来滚动页面。C API具有该功能webkit_web_view_run_javascript(),因此您可以为其提供一些javascript之类的

window.scrollTo(500,0);

并且页面应该滚动。

于 2014-02-18T17:59:07.397 回答