2

LoadString メソッドを介して HTML を表示するために使用している webkit-sharp WebView があります。

Webview は ScrolledWindow に配置され、ScrolledWindow は Gtk ウィンドウに配置されます。

HTML の特定の部分にスクロールするように WebView に指示できるようにしたいと考えています。通常、アンカーを使用してこれを行います。

アンカーと、そのアンカーにジャンプするための JavaScript を定義しました。ExecuteScript メソッドを介して JavaScript を呼び出します。これはまったく何もしません。

また、JavaScript を呼び出すボタンを HTML に追加しようとしました。これも何もしません。

ページ内の既知の場所にスクロールできるようにするために、これを機能させるためにできることはありますか?

更新: HTML をファイルに保存し、スクロールするように指示する URL を使用してそこから読み込むことで、これを機能させることができます。ただし、ページを表示する前にディスクに書き込むとパフォーマンスが低下するため、これは避けたいと思います。

4

3 に答える 3

0

そのアンカーにジャンプする JavaScript は、ページがまだロードされている間は機能しません。ページのロードが終了するのを待って (そのためのイベントがあります)、スクリプトを実行することで機能させました。

于 2013-04-23T11:27:41.037 に答える
0

ScrolledWindow にどのように追加していますか? 私は GTK の専門家ではありませんが、「add」メソッドを呼び出すと機能し、add_with_viewport を呼び出すと機能しないことを発見しました。

また、javascript を実行する必要がない場合もあります。HTML ページを制御しているように見え、dom 要素に簡単にアクセスして要素のクリック メソッドを呼び出すことができます。次のサンプル 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()      
于 2013-03-31T15:43:33.913 に答える