Python:WebKit.WebView:如何重载错误?

问题描述 投票:1回答:2

我最近问过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
2个回答
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')

1
投票

我通过转移到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以阻止为该事件调用其他处理程序。错误地进一步传播事件。

© www.soinside.com 2019 - 2024. All rights reserved.