2010-07-15 6 views
2

Est-ce que quelqu'un sait comment intercepter les clics sur les liens dans le contrôle WPF WebBrowser?WPF WebBrowser Control - aucun événement LinkClick

Je dois obtenir la cible des liens, lorsque le lien est cliqué, avant que la page ne navigue.

Toutes les entrées très appréciées!

Ma solution dans le code Comme proposé pour les liens simples qui seraient obtenus avec le code suivant:

private void webBrowser1_Navigating(object sender, NavigatingCancelEventArgs e) 
{ 
    //prefix must be lowercase (ssrs conforms to web-standards and makes things lowercase) 
      string myPrefix = "http://myPrefix"; 

      //check if target starts with the prefix 
      if (e.Uri.AbsoluteUri.StartsWith(myPrefix)) 
      { 
       //cancel Navigation 
       e.Cancel = true; 
      } 
} 

Merci de me hepling sur ce sujet.

Répondre

2

Vous pouvez attacher un gestionnaire d'événement à l'événement Navigation. Extrayez le lien, exécutez votre logique avant de naviguer dans la page.

Cheers.

+0

Mais parfois cliquer sur un lien ne provoque pas la navigation, mais exécute un gestionnaire javascript. – STO

+0

Merci à vous deux @DrakeVN, j'ai essayé d'obtenir tous les liens dans la page chargée dans l'événement Navigué, et d'y ajouter des événements pour chaque lien. Mais cela devient un peu poilu, car il faut travailler avec de nombreux objets com_objects. Et beaucoup semblaient changer, comparé au contrôle WebBrowser dans Windows Forms. Je vais essayer votre approche plus simple. @STO: les liens avec les gestionnaires javascript ne devraient pas poser de problème dans mon cas, car j'utilise les liens piégés dans Reporting Services pour ouvrir les éléments correspondants. – SwissCoder

+0

@STO si le gestionnaire javaScript effectue un traitement puis une fenêtre window.open, existe-t-il un moyen d'intercepter cette ouverture et d'afficher cette URL dans le cadre de l'application conteneur, peut-être dans une nouvelle instance de contrôle WebBrowser? – Nitin

0

Contrôlez vos clics dans le navigateur Web Navigation gestionnaire d'événements. Vous pouvez créer ceci dans Xal ou dans le constructeur et utiliser la méthode suivante:

private void webBrowser_Navigating(object sender, NavigatingCancelEventArgs e) 
    { 
     // The WebBrowser control is checking the Uri 
     if (e.Uri.ToString() != "Place your url string here") //ex: "http://stackoverflow.com" 
     { 
      // Uri is not the same so it cancels the process 
      e.Cancel = true; 
     } 
    }