我在终端尝试了这一切,一切正常,但如果我在内部脚本中运行,我就无法在gtk.main()
之后插入JavaScriptimport 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)
如何解决这个问题?提前谢谢!
答案 0 :(得分:5)
嗯,这个问题在GUI编程中实际上非常经典,因此它就是解决方案。直接操作(例如按下按钮)以及间接操作(webkit浏览器完成加载页面)需要始终启动位于不同进程或不同线程上的操作(函数)。
在这种情况下,您可以使用"load-finished"
对象webkit
提供的b
事件。
网页完成加载后,相关功能将启动执行JS代码。这就是代码的样子:
def load_finished(webview, frame):
js = 'alert("a");'
b.execute_script(js)
b = webkit.WebView()
b.connect("load-finished", load_finished)
答案 1 :(得分:0)
gtk.main()将阻塞,直到它收到一个gtk.main_quit()被调用或其他类似的退出调用。害怕你必须使用回调或在调用gtk.main()之前进行所有javascript插入。
很惊讶你设法运行gtk.main()而没有阻塞,直到你在终端上按Ctrl + C..