如何使用Gtk 3.0和WebKit2 4.0处理Python中的链接点击?

时间:2016-07-26 14:02:18

标签: python webkit gtk gtk3 webkitgtk

我创建了我的视图(包含在窗口中)并加载了这样的URL:

self.web_view = WebKit2.WebView()
self.web_view.load_uri("https://en.wikipedia.org")

我的“迷你浏览器”启动,我可以点击本地链接(绑定到JavaScript事件的链接或指向同一域上其他页面的链接)。但是当链接指向其他域时,没有任何反应。如何捕获外部链接的点击?或者我如何在系统默认浏览器中打开这些链接?

更新:“迷你浏览器”不处理跨站点链接。我可以编写一个事件挂钩(onclick)来中断“迷你浏览器”并根据自定义逻辑进行操作,还是有办法配置跨站点链接。

2 个答案:

答案 0 :(得分:1)

您使用的是GtkLinkButton吗?根据使用默认浏览器打开链接的gtk-show-uri文档,您还需要安装gvfs以获得对http://ftp://等uri方案的支持

对于基于debian的发行版,您可以像这样安装gvfs:

sudo apt-get install gvfs gvfs-backends gvfs-fuse

如果这没有帮助,您还可以检查gtk_show_uri的错误消息,以防它返回FALSE

对于像您这样的自定义浏览器,根据GtkLinkButton的文档,您需要连接到activate-link signal并从处理程序返回true ...可能您已经这样做了。

答案 1 :(得分:1)

GtkLinkButton答案确实不合适,因为这与GtkLinkButton没有任何关系,而WebKit也没有使用gvfs来加载链接。

我不知道为什么跨域链接不适合您。它们应该默认工作。您可以使用WebKitWebView::decide-policy信号控制此行为,但默认策略应该是打开链接。

您在评论中提到您在使用目标_blank的链接时遇到问题。这些是您测试的唯一跨域链接吗?这个问题很简单:WebKit无法自动为您打开新窗口,您必须为此编写代码。幸运的是,它非常简单:连接到WebKitWebView::create并按照那里的文档进行操作。您基本上需要创建一个新的GtkWindow,创建一个相关的 WebKitWebView,将新视图打包到窗口中,连接到新视图上的WebKitWebView::ready-to-show,并在发出该信号时显示窗口

相关问题