3 Stimmen

Wie ruft man benutzerdefiniertes Javascript in System.Windows.Forms.WebBrowser auf?

Ich lade eine Webseite eines Drittanbieters, die folgenden Code enthält:

onDomReady(function() { some_code1; });

in das WebBrowser-Komponente. Nachdem some_code1 ausgeführt wurde, muss ich einige Manipulationen mit dem Dom durchführen, die some_code1 ungültig machen. Die Frage ist, wie kann ich feststellen, dass some_code1 ausgeführt wurde?

Ich kann nicht folgendes machen:

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

Da dieses Ereignis vor der Ausführung von some_code1 stattfindet und es ungültig macht.

Außerdem kann ich nicht folgendes machen:

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

Da some_code1 als anonyme Funktion deklariert ist.

Es scheint, dass der einzige Weg ist, dies zu tun:

private void web_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    var script = GetScriptText(web.DocumentText);
    // Skript im Webbrowser ausführen
    DoRequiredManipulations();
}

Das Problem ist, dass ich nicht weiß, wie ich dieses Skript im Webbrowser ausführen kann. Ich habe es mit web.Navigate("javascript: " + script); versucht, aber es funktioniert nicht korrekt.

2voto

Poma Punkte 8246

Ich habe herausgefunden, wie man das macht:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X