Comment injecter du Javascript dans le contrôle WebBrowser

Il y a un bon tutoriel ici sur les formulaires Windows

Comment injecter du Javascript dans le contrôle WebBrowser?

J’ai essayé et ça marche très bien

Mais le problème est que les objects utilisés n’y sont pas reconnus par l’application wpf. Donc, ce que je demande, c’est quel est l’équivalent de la fonction ci-dessous dans l’application wpf. Je vous remercie.

HtmlElement head = webBrowser1.Document.GetElementsByTagName("head")[0]; HtmlElement scriptEl = webBrowser1.Document.CreateElement("script"); IHTMLScriptElement element = (IHTMLScriptElement)scriptEl.DomElement; ssortingng srJquery = File.ReadAllText("jquery.txt"); element.text = srJquery; head.AppendChild(scriptEl); 

la fonction ci-dessus fonctionne parfaitement sous Windows Form C 4.0, mais les objects utilisés tels que HtmlElement ne sont pas reconnus par l’application WPF.

Est-ce que ça marche?

  private void WebBrowser_LoadCompleted (object sender, System.Windows.Navigation.NavigationEventArgs e) { var webBrowser = sender as WebBrowser; var document = webBrowser.Document as mshtml.HTMLDocument; var ahref = document.getElementsByTagName("A").Cast().First(); ahref.setAtsortingbute( "onmouseenter", "javascript:alert('Hi');", 1); } 

Vous avez besoin d’une référence Microsoft.mshtml (l’API .net et non celle de MS Office).

Veuillez également consulter ce code pour le contrôle navigateur ObjectForScripting WPF qui utilise la propriété ObjectForScripting de WebBrowser qui peut vous aider à injecter du javascript …

http://blogs.msdn.com/b/wpf/archive/2011/05/27/how-does-wpf-webbrowser-control-handle-window-external-notify.aspx

Faites-moi savoir si cela aide.

La meilleure réponse que j’ai trouvée sur le net était celle de http://clistax.com/question/qt/153748/st/4eb64b29180c4

Je crois que la méthode la plus simple pour injecter du code Javascript dans un document HTML de WebBrowser Control à partir de c # consiste à appeler la méthode “execSsortingp” avec le code à injecter en tant qu’argument.

Dans cet exemple, le code javascript est injecté et exécuté au niveau global:

 var jsCode="alert('hello world from injected code');"; WebBrowser.Document.InvokeScript("execScript", new Object[] { jsCode, "JavaScript" }); 

Si vous souhaitez retarder l’exécution, injectez des fonctions et appelez-les après:

 var jsCode="function greet(msg){alert(msg);};"; WebBrowser.Document.InvokeScript("execScript", new Object[] { jsCode, "JavaScript" }); WebBrowser.Document.InvokeScript("greet",new object[] {"hello world"}); 

Ceci est valable pour les contrôles Windows Forms et WPF WebBrowser.

Cette solution n’est pas inter-navigateur, car “execScript” est défini uniquement dans IE et Chrome. Mais la question concerne les contrôles Microsoft WebBrowser et IE est le seul supporté.

J’ai trouvé cette aide qui parle d’un invokescript eqivilent dans wpf pour simplement exécuter du code de script dans html: http://msdn.microsoft.com/en-us/library/cc452443.aspx