12
votes

Comment puis-je obtenir le titre de page dans le contrôle WebBrowser?

Comment puis-je obtenir le titre de page dans un contrôle WebBrowser lorsque je navigue sur différents sites Web?


xmlns xxx

Propriétés commençant par D xxx

xaml tag xxx


0 commentaires

6 Réponses :


0
votes

Vous pouvez utiliser Invokescript Pour obtenir le titre,

 String title = browser.InvokeScript("document.title");


3 commentaires

J'ai essayé sur chargée de chargement événement et il a lancé une exception inconnue.


Vous devez activer les scripts selon la documentation MSDN et que cette méthode ne peut également être appelée qu'après le chargement du document, vous devez donc attendre de temps en temps si le document n'est pas prêt.


J'ai essayé d'appeler ceci lors de la réception de l'événement navigué et d'obtenir une exception qui lit "Erreur: 80020006". Et oui, j'ai isscrriptenabled = "vrai" dans mon xaml.



0
votes

Je suis à peu près sûr que

String title = browser.Document.Title;


2 commentaires

Propriétés commençant par D: DataContext, désiré, Dispatcher, DoubleTap. (Microsoft.phone.controls). XAML Tag:


Désolé, pensait au contrôle régulier des formes WebBrowser. Avez-vous essayé la réponse de @akash Kava, mais avec le paramètre ISSCRIPTENADD TRUE ?



9
votes

J'ai eu le même problème. La réponse de @akash Kava est presque correcte mais c'est le javascript correct pour lire le titre HTML:

String title = (string)browser.InvokeScript("eval", "document.title.toString()");


1 commentaires

Comme David l'a dit, de travailler correctement, cela doit être appelé dans le gestionnaire d'événements webbrowser.LoadComplet . De plus, étant donné que cela est exécuté dans un gestionnaire d'événements, le code ci-dessus doit être appelé dans l'action de Control.invoke pour WPF ou Dispatcher.invoke pour Silverlight / Windows Phone Si l'interface utilisateur est mise à jour.



2
votes

Pour moi, le code suivant fonctionne. Les réponses de @akash et @mikko m'ont mis sur le bon chemin, mais j'ai toujours eu des problèmes avec quelques sites Web. Le problème que je comprends, c'est que l'événement navigué est soulevé lorsque le composant code> WebBrowser code> commence à obtenir des données à partir du serveur distant. En tant que tel, l'objet DOM n'est pas encore complet, appelez donc le document.title code> jette une erreur. Donc, je réessaye juste après quelques millisecondes jusqu'à ce que je reçois le titre. Cette "boucle" n'a jamais itéité plus de 3 fois sur n'importe quel site Web que j'ai testé et impressionnablement a apporté le titre à chaque fois.

private void webBrowser1_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e)
{
    ThreadPool.QueueUserWorkItem(UpdateText);
}

private void UpdateText(object o)
{
    Thread.Sleep(100);
    Dispatcher.BeginInvoke(() =>
    {
        try
        {
            textBlock1.Text = webBrowser1.InvokeScript("eval", "document.title").ToString();
        }
        catch (SystemException)
        {
            ThreadPool.QueueUserWorkItem(UpdateText);
        }
    });
}


0 commentaires

0
votes

Le code ci-dessous fonctionne pour moi, notez l'événement Navigated, si vous utilisez chargé, il déclenchera juste avant que la page soit chargée, vous souhaitez que cela se déclenche quelque temps "après" la page est entièrement chargée, la navigation active comme cet événement. xxx


0 commentaires

1
votes

Toutes les réponses ne sont pas 100% correctes:

Vous devez appeler ce qui suit:

chaîne title = (string) Browser.Invokescript ("Eval", "document.title.tostring ()");

dans l'événement chargé de chargement du navigateur, et non dans l'événement Navigated .


0 commentaires