2010-09-17 9 views
2

Je suis chargement page web tiers qui contient le code suivantComment invoquer JavaScript personnalisé dans System.Windows.Forms.WebBrowser?

<script type="text/javascript"> 
onDomReady(function() { some_code1; }); 
</script> 

dans le composant WebBrowser. Après some_code1 avait exécuté j'ai besoin de faire quelques manipulations avec Dom qui rendra some_code1 invalide. La question est comment déterminer que some_code1 avait exécuté?

Je ne cant't

private void web_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
{ 
    DoRequiredManipulations(); 
} 

Depuis cet événement aura lieu avantsome_code1 a exécuté et le rendre invalide.

Je ne peux pas faire

private void web_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
{ 
    web.Document.InvokeScript("doSome_code1"); 
    DoRequiredManipulations(); 
} 

Depuis some_code1 est déclarée comme une fonction anonyme.

Il semble que la seule façon de le faire est la suivante:

private void web_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
{ 
    var script = GetScriptText(web.DocumentText); 
    //execute script in webbrowser 
    DoRequiredManipulations(); 
} 

Le problème est que je ne sais pas comment exécuter ce script dans WebBrowser. J'avais essayé web.Navigate("javascript: " + script); mais cela ne fonctionne pas correctement.

Répondre

1

J'ai trouvé comment faire:

HtmlElement scriptEl = web.Document.CreateElement("script"); 
(scriptEl.DomElement as IHTMLScriptElement).text = "function myscript() { " + script.Text + " }"; 
web.Document.GetElementsByTagName("head")[0].AppendChild(scriptEl); 
web.Document.InvokeScript("myscript");