webkit锐利滚动到HTML锚标记

本文关键字:HTML 滚动 webkit | 更新日期: 2023-09-27 18:06:21

我有一个webkit-sharp WebView,我用它来显示HTMLviaLoadString方法。

webview被放置在一个ScrolledWindow中

我希望能够告诉WebView滚动到一个特定的部分HTML的一部分。通常情况下,我们会使用锚。

我已经定义了一个锚和一些JavaScript跳转到该锚,我通过ExecuteScript方法调用JavaScript。这在所有.

我还尝试在HTML中添加一个按钮来调用JavaScript。

我能做些什么来让这件事成功,让我能滚动到页面中的已知位置?

更新:我可以通过将HTML保存到一个文件,然后使用一个URL从那里加载,告诉它滚动来完成这项工作。但是,我希望避免这样做,因为在显示页面之前将页面写入磁盘会影响性能。

webkit锐利滚动到HTML锚标记

如何添加到滚动窗口?我不是GTK专家,但我发现,如果调用"add"方法,它可以工作,如果调用add_with_viewport

,它不工作。

也可能不需要执行javascript。看起来您可以控制html页面,并且可以轻松访问dom元素并在元素上调用click方法。下面的示例python代码查找id为"one"的锚,并滚动到所需的位置,而无需调用javascript。

from gi.repository import WebKit 
from gi.repository import Gtk 
from gi.repository import GLib, GObject
class WebkitApp:
    def exit(self, arg, a1):
        Gtk.main_quit()
    def onLoad(self, view, frame):
        doc = view .get_dom_document()
        a = doc.get_element_by_id("one")
        a.click()
    def __init__(self):
        win = Gtk.Window()
        self.view = WebKit.WebView()
        # Signal Connections
        self.view.connect("onload-event", self.onLoad)
        file = open("/tmp/epl-v10.html")
        html = file.read()
        self.view.load_string(html, "text/html", "UTF-8", "file:///tmp")
        sw = Gtk.ScrolledWindow() 
        # sw.add_with_viewport(self.view)
        sw.add(self.view);
        win.add(sw)
        win.maximize()
        win.connect("delete-event", self.exit)
        win.show_all()
app = WebkitApp()
Gtk.main()      

跳转到该锚的JavaScript在页面仍在加载时不工作,通过等待页面加载完成(有一个事件)然后运行脚本,我使其工作

给定一个元素:

<a id='myElement'>I want to scroll to this line</a>

可以用下面的JavaScript滚动到

document.getElementById('myElement').scrollIntoView();

可以在WebView中使用ExecuteScript方法执行,例如:

_webView.ExecuteScript("document.getElementById('myElement').scrollIntoView();");