拦截点击webkit.webview中的链接

时间:2017-09-22 10:51:57

标签: web webview webkit vala

在HTML页面中,通过单击链接,将显示给定的页面HTML。

但如何制作

使用其他程序在另一个标签页中打开此页面吗?

如果链接指向另一个那个     .htm [l],php ...(zip,iso等)如何检测      并启动下载?

有必要检测一个链接上的点击,然后启动 足够的治疗,我不知道如何制作,

我没有找到示例(使用vala)。

示例:test.vala:

using Gtk;
using WebKit;
/* 
valac --pkg gtk+-3.0 --pkg webkit2gtk-4.0 --pkg posix test.vala && ./test 
*/
int main (string[] args) {
    Gtk.init(ref args);
    var window=new Gtk.Window();
    window.destroy.connect(Gtk.main_quit);
    WebView wv=new WebKit.WebView();
    string url="file://"+Posix.realpath(args[0])+".html";
    wv.load_uri(url);
    window.add(wv);
    window.show_all();
    Gtk.main();
    return 0;
}

的test.html:

<html>
    <body>
        <a href='https://searx.aquilenet.fr'>searx</a>
        <a href='https://launchpad.net/xpad/trunk/5.0.0/+download/xpad-5.0.0.tar.bz2'>xpad</a>
    </body>
</html>

2 个答案:

答案 0 :(得分:0)

连接到WebView实例上的decide-policy信号,并检查传入的两个对象:

wv.decide_policy.connect((policy, type) => {
    if (type == WebKit.PolicyDecisionType.NAVIGATION_ACTION &&)
        WebKit.NavigationPolicyDecision nav_policy =
            (WebKit.NavigationPolicyDecision) policy;
        if (nav_policy.get_navigation_type() ==
                WebKit.NavigationType.LINK_CLICKED) {
            string href = nav_policy.request.uri;
            // Do something with the href
        }
});

这是您处理新链接,新窗口,显示或保存回复等的方式。请参阅信号文档以及两个参数WebKit.PolicyDecisionWebKit.PolicyDecisionType

答案 1 :(得分:0)

它会:

wv.decide_policy.connect((policy, type) => {
    if (type == WebKit.PolicyDecisionType.NAVIGATION_ACTION ) {
        WebKit.NavigationPolicyDecision nav_policy =
            (WebKit.NavigationPolicyDecision) policy;
        if (nav_policy.get_navigation_type() ==
                WebKit.NavigationType.LINK_CLICKED) {
            string href = nav_policy.request.uri;
GLib.stdout.printf("%s\n",href);
        } }
    return true;
});

非常感谢