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 浏览器完成加载页面)总是需要启动位于不同进程或不同线程上的动作(函数)。

在这种情况下,您可以使用object"load-finished"给出的事件。webkitb

网页完成加载后,相关函数将启动执行您的 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 回答