2017-09-22 4 views
0

Dans une page HTML, en cliquant sur un lien, la page HTML donnée est affichée.Intercepter cliquer sur le lien dans webkit.webview

Mais comment faire pour

ouvrir cette page dans un autre onglet, avec un autre programme?

Si le lien pointe vers une autre chose qu'un .htm [l], php ... (zip, iso, etc.) comment détecter et lancer le téléchargement?

Il serait nécessaire de détecter le clic sur un lien, pour lancer le traitement adéquat, et je ne vois pas comment faire,

Je ne trouve pas d'exemples (avec Vala).

Exemple: 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

Pouvez-vous trouver des exemples dans une autre langue? C'est vraiment plus une question d'API WebKit, la langue est vraiment juste un détail. Si vous pouvez trouver un exemple dans une autre langue, je suis sûr que quelqu'un ici peut vous aider à comprendre comment le faire dans Vala (en fait, le canal #vala sur irc.gnome.org est un bon endroit pour ce type de question, aussi). – nemequ

+0

avec python par exemple., Mais impossible à adapter – bul

Répondre

0

Connectez au signal decide-policy sur votre WebView par exemple, et d'examiner les deux objets passés dans:

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

Voici comment gérer de nouveaux liens, de nouvelles fenêtres, afficher ou enregistrer une résolution. réponse, etc. Voir les documents pour le signal et pour les deux paramètres WebKit.PolicyDecision et WebKit.PolicyDecisionType.

0

il va:

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

merci beaucoup