2014-02-14 77 views
4

如何滚动webkit2gtk窗口小部件?在GTK + 3中滚动WebKit2.Webkit窗口

webkitgtk(亦称webkit1)你换你WebViewScrolledWindow,所以可以使用它vadjustment属性。

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

作为解释,我想添加触摸支持webkit2 我有 入侵我的方法是在 WebView部件 ¹上添加一个透明层,但现在我正在检测触摸,我似乎无法使用它们。

¹今天发布的版本无需在顶层显示图层。尽管如此,我已经触动了一切,我无能为力。

回答

6

WebKit2中的流程分离有一些优点,但它也使许多事情变得更加复杂。我相信滚动是其中之一:它发生在web进程中,因为滚动条现在由webkit处理,而不是Gtk小部件。触摸处理同样适用:部分是在网络过程中完成的。卡洛斯加西亚坎波斯已经写了blog post关于使用WebKitWebExtension在这方面提供帮助。请注意,该设计对您的代码也有很多影响:部分代码将运行在完全不同的过程中。

答案的其余部分没有测试,请考虑这更像是一个受过教育的猜测:

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

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

如果我在做什么你正在尝试做的,我的第一站将是#webkitgtk + IRC频道上Freenode的检查,如果上面真的是一个明智的方式做你想要的...

+0

很好的答案,谢谢。 – Veedrac

3

你可以运行一些javascript来滚动页面。在C API所具有的功能webkit_web_view_run_javascript()所以你可以给它一些JavaScript像

window.scrollTo(500,0); 

和页面应该滚动。

+0

这是在简单情况下是迄今为止最简单的解决方案,因为您不需要Web扩展。一旦事情变得更复杂并取决于DOM树 - webextensions可能会更容易。 – gauteh