我有一个webkit-sharp WebView,我用它来显示HTML LoadString方法。
webview放置在ScrolledWindow中,放置了ScrolledWindow 在Gtk窗口中。
我希望能够告诉WebView滚动到特定部分 的HTML。通常情况下,人们会使用锚点来做到这一点。
我已经定义了一个锚点和一些JavaScript来跳转到那个锚点,我 通过ExecuteScript方法调用JavaScript。这没什么作用 所有
我还尝试在调用HTML的HTML上添加一个按钮 JavaScript的。这也没有任何作用。
我能做些什么才能做到这一点,尽我所能 滚动到页面中的已知位置?
更新:我可以通过将HTML保存到文件然后使用指示滚动的URL从那里加载来完成此工作。但是我想避免这样做,因为在显示页面之前将页面写入磁盘会有性能损失。
答案 0 :(得分:0)
您是如何添加到ScrolledWindow的?我不是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()
答案 1 :(得分:0)
跳转到该锚点的JavaScript在页面仍在加载时不起作用,等待页面加载完成(有一个事件)然后运行脚本我使它工作。
答案 2 :(得分:0)
给出一个元素:
<a id='myElement'>I want to scroll to this line</a>
这可以使用此JavaScript滚动到:
document.getElementById('myElement').scrollIntoView();
可以使用ExecuteScript方法在WebView中执行,例如:
_webView.ExecuteScript("document.getElementById('myElement').scrollIntoView();");