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从那里加载,告诉它滚动来完成这项工作。但是,我希望避免这样做,因为在显示页面之前将页面写入磁盘会影响性能。
如何添加到滚动窗口?我不是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();");