【问题标题】:Python: WebKit.WebView: how to reload on error?Python:WebKit.WebView:如何在出错时重新加载?
【发布时间】:2019-09-11 04:38:00
【问题描述】:

我最近问过this question,得到了答复。我正在尝试完全相同,但是 WebKit.WebViewGTK 我被困在同一部分。

目标:如果第一个 URL 不可访问,则加载另一个 URL。

import gi, time
gi.require_version('Gtk', '3.0')
gi.require_version('WebKit', '3.0')
from gi.repository import Gtk, WebKit

browser = WebKit.WebView()
browser.load_uri('http://this-domain-does-not-exist.tld')

def load_error(webview, event, url, error):
  webview.load_uri('http://google.com') # not working

browser.connect('load-error', load_error)

win = Gtk.Window()
win.add(browser)
win.show_all()
Gtk.main()

有什么想法吗?提前致谢!

【问题讨论】:

    标签: python webview gtk webkit gtk3


    【解决方案1】:

    由于某些原因,在错误回调中运行的命令会被忽略。解决方法是在处理完所有其他事件后添加后备 uri 加载。像这样:

    from gi.repository import Gtk, WebKit, GLib
    
    ....
    
    def load_error(webview, event, url, error):
        GLib.idle_add(webview.load_uri, 'http://google.com')
    

    【讨论】:

      【解决方案2】:

      我通过移动到 WebKit2 并在回调中返回 True 让它工作了。可能只有返回也适用于 WebKit,但我没有可用的测试。修改代码:

      import gi
      gi.require_version('Gtk', '3.0')
      gi.require_version('WebKit2', '4.0')
      from gi.repository import Gtk, WebKit2
      
      browser = WebKit2.WebView()
      browser.load_uri('http://this-domain-does-not-exist.tld')
      
      def load_failed(webview, event, url, error):
          webview.load_uri('http://google.com')
          return True
      
      browser.connect('load-failed', load_failed)  # Changed from load-error
      
      win = Gtk.Window()
      win.connect("destroy", Gtk.main_quit)
      win.add(browser)
      win.show_all()
      Gtk.main()
      

      来自documentation

      返回:True 以阻止其他处理程序被调用该事件。假 进一步传播事件。

      【讨论】:

        猜你喜欢
        • 2014-04-25
        • 2022-11-18
        • 1970-01-01
        • 2011-08-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多