webkit-sharp滚动到HTML锚标记

时间:2013-03-29 04:18:30

标签: c# mono webkit anchor webkit-sharp

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

webview放置在ScrolledWindow中,放置了ScrolledWindow 在Gtk窗口中。

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

我已经定义了一个锚点和一些JavaScript来跳转到那个锚点,我 通过ExecuteScript方法调用JavaScript。这没什么作用 所有

我还尝试在调用HTML的HTML上添加一个按钮 JavaScript的。这也没有任何作用。

我能做些什么才能做到这一点,尽我所能 滚动到页面中的已知位置?

更新:我可以通过将HTML保存到文件然后使用指示滚动的URL从那里加载来完成此工作。但是我想避免这样做,因为在显示页面之前将页面写入磁盘会有性能损失。

3 个答案:

答案 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();");