【问题标题】:Python GTK + webkit - insert JavaScript after gtk.main()Python GTK + webkit - 在 gtk.main() 之后插入 JavaScript
【发布时间】:2012-07-31 20:23:43
【问题描述】:

我在终端尝试过,一切正常,但如果我在脚本中运行它,我无法在 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)

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

【问题讨论】:

    标签: python webkit gtk


    【解决方案1】:

    嗯,这个问题在 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 代码怎么办,例如身体负载?使用 load-finished 事件默认 js 函数在插入 js 后执行。在这个例子中,第一个 js 将 bi alert('a') 然后在 body 上加载。可能我需要 James Hurford 建议的回调方法,但我的 Python 知识不是很好。 .. 可能我必须实现线程和回调......再次感谢你们俩。
    • 或者你可以使用一个计时器,我相信 gtk 自带一个,或者它可以在 glib 中。这样可以避免线程的并发问题。这真的取决于你想做什么。
    【解决方案2】:

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

    很惊讶你在终端中按下 Ctrl+C 之前成功运行 gtk.main() 而不阻塞。

    【讨论】:

      猜你喜欢
      • 2017-11-20
      • 1970-01-01
      • 2023-03-15
      • 2011-10-24
      • 1970-01-01
      • 2012-07-20
      • 2015-11-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多