Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python GTK+;webkit-在gtk.main()之后插入JavaScript_Python_Webkit_Gtk - Fatal编程技术网

Python GTK+;webkit-在gtk.main()之后插入JavaScript

Python GTK+;webkit-在gtk.main()之后插入JavaScript,python,webkit,gtk,Python,Webkit,Gtk,我在终端中尝试了这个,一切都正常,但如果我在脚本中运行这个脚本,我就不能在gtk.main()之后插入JavaScript 如何解决这个问题?提前谢谢 gtk.main()将阻塞,直到它收到一个gtk.main_quit()调用或其他类似的退出调用。恐怕您必须使用回调或在调用gtk.main()之前完成所有javascript插入 令人惊讶的是,在终端中点击Ctrl+C之前,您成功地运行了gtk.main(),而没有阻塞它。这个问题实际上在GUI编程中非常经典,因此它是解决方案。直接操作(例如按

我在终端中尝试了这个,一切都正常,但如果我在脚本中运行这个脚本,我就不能在gtk.main()之后插入JavaScript

如何解决这个问题?提前谢谢

gtk.main()将阻塞,直到它收到一个gtk.main_quit()调用或其他类似的退出调用。恐怕您必须使用回调或在调用gtk.main()之前完成所有javascript插入


令人惊讶的是,在终端中点击Ctrl+C之前,您成功地运行了gtk.main(),而没有阻塞它。

这个问题实际上在GUI编程中非常经典,因此它是解决方案。直接操作(例如按下按钮)和间接操作(webkit浏览器完成加载页面)始终需要启动位于不同进程或不同线程上的操作(功能)

在这种情况下,您可以使用
webkit
对象
b
提供的
事件“load finished”

网页加载完成后,相关函数将启动,执行JS代码。这是代码的样子:

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

b = webkit.WebView()
b.connect("load-finished", load_finished)

紧跟其后的是gtk.main()。很好的回答和例子。法布里齐奥,谢谢!如果我想在文档中插入js,这是可行的。如果存在JavaScript代码,例如body onload,该怎么办?加载完成事件时,在插入js后执行默认js函数。在本例中,第一个js将发出bi警报('a'),然后加载到body上。可能我需要James Hurford建议的回调方法,但我的Python知识不太好。。可能我必须实现线程和回调。。。再次感谢你们两位。或者你们可以使用一个计时器,我相信gtk附带了一个计时器,或者它可能是油嘴滑舌的,这将避免线程的并发问题。这真的取决于你想做什么。
def load_finished(webview, frame):
    js = 'alert("a");'
    b.execute_script(js)

b = webkit.WebView()
b.connect("load-finished", load_finished)