Python: WebKit.WebView: 出错时如何重新加载?
Python: WebKit.WebView: how to reload on error?
我最近问了 ,有人 回答了 。我正在尝试完全相同,但是 WebKit.WebView
和 GTK
并且我被困在同一部分。
目标: 如果第一个无法访问,则加载另一个 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()
有什么想法吗?提前致谢!
由于某些原因,错误回调中 运行 的命令将被忽略。解决方法是在处理完所有其他事件后添加回退 uri 加载。像这样:
from gi.repository import Gtk, WebKit, GLib
....
def load_error(webview, event, url, error):
GLib.idle_add(webview.load_uri, 'http://google.com')
我通过移动到 WebKit2 并在回调中 returning True
让它工作。有可能只有 return 也适用于 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()
Returns: True to stop other handlers from being invoked for the event. False to
propagate the event further.
我最近问了 WebKit.WebView
和 GTK
并且我被困在同一部分。
目标: 如果第一个无法访问,则加载另一个 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()
有什么想法吗?提前致谢!
由于某些原因,错误回调中 运行 的命令将被忽略。解决方法是在处理完所有其他事件后添加回退 uri 加载。像这样:
from gi.repository import Gtk, WebKit, GLib
....
def load_error(webview, event, url, error):
GLib.idle_add(webview.load_uri, 'http://google.com')
我通过移动到 WebKit2 并在回调中 returning True
让它工作。有可能只有 return 也适用于 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()
Returns: True to stop other handlers from being invoked for the event. False to propagate the event further.