6

我已经创建了我的视图(包装在一个窗口中)并加载了一个这样的 URL:

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

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

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

4

2 回答 2

1

GtkLinkButton答案真的是离题了,因为这与GtkLinkButtonWebKit 不使用 gvfs 加载链接完全没有关系。

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

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

于 2017-01-02T21:32:01.230 回答
1

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

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

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

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

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

于 2016-08-02T14:31:31.837 回答