2017-09-22 5 views
0

In einer HTML-Seite, durch Klicken auf einen Link, wird die Seite HTML angezeigt.Abfangen klicken Sie auf den Link in webkit.webview

Aber wie für

öffnen diese Seite in einer anderen Registerkarte mit einem anderen Programm zu machen?

Wenn der Link auf eine andere Sache zeigt, dass .htm [l], php ... (zip, iso, etc.) wie zu erkennen und starten Sie den Download?

Es wäre notwendig, den Klick auf einen Link zu erfassen, eine angemessene Behandlung zu starten, und ich sehe nicht, wie zu machen,

finde ich Beispiele nicht (mit Vala).

Beispiel: 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> 
+0

Können Sie Beispiele in einer anderen Sprache finden? Das ist wirklich mehr eine WebKit API Frage, die Sprache ist wirklich nur ein Detail. Wenn du ein Beispiel in einer anderen Sprache findest, bin ich mir sicher, dass dir jemand hier in Vala helfen kann, herauszufinden, wie es dazu geht (eigentlich ist der #vala-Kanal auf irc.gnome.org ein großartiger Ort für diese Art von Frage, auch). – nemequ

+0

mit Python zum Beispiel., Aber unmöglich zu adaptieren – bul

Antwort

0

Verbindung mit dem decide-policy Signal auf WebView Instanz, und untersuchen die beiden bestanden Objekte in:

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 
     } 
}); 

So behandeln Sie neue Links, neue Fenster, Anzeigen oder Speichern einer Res ponse, usw. Siehe Dokumentation für das Signal und für die zwei Parameter WebKit.PolicyDecision und WebKit.PolicyDecisionType.

0

geht es:

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; 
}); 

vielen Dank

Verwandte Themen