2

ターミナルでこれを試しましたが、すべて問題ありませんが、スクリプト内でこれを実行すると、gtk.main()の後にJavaScriptを挿入できません。

import gtk
import webkit

w = gtk.Window()
b = webkit.WebView()
w.add(b)
b.open('http://example.com')
w.show_all()

gtk.main() # this I don`t run inside terminal

#and after showing window I want to insert some JavaScript code

js = 'alert("a");'
b.execute_script(js)

これを解決する方法は?前もって感謝します!

4

2 に答える 2

6

さて、この問題は実際には GUI プログラミングでは非常に古典的であるため、解決策です。直接的なアクション (ボタンを押すなど) と間接的なアクション (Webkit ブラウザーがページの読み込みを終了する) は、常に異なるプロセスまたは異なるスレッドにあるアクション (関数) を起動する必要があります。

この場合、オブジェクト"load-finished"によって指定されたイベントを使用できます。webkitb

Web ページの読み込みが完了すると、関連する関数が起動され、JS コードが実行されます。コードは次のようになります。

def load_finished(webview, frame):
    js = 'alert("a");'
    b.execute_script(js)

b = webkit.WebView()
b.connect("load-finished", load_finished)
于 2012-08-02T09:14:08.380 に答える
0

gtk.main() は、gtk.main_quit() が呼び出されるか、他の同様の終了呼び出しを受け取るまでブロックします。コールバックを使用して、または gtk.main() を呼び出す前に、すべての JavaScript 挿入を行う必要があるのではないかと恐れています。

ターミナルで Ctrl+C を押すまで、ブロックせずに gtk.main() を実行できたことに驚きました。

于 2012-08-01T07:18:37.870 に答える