Laden...

Javascript im WebBrowser ausführen ohne den Request abzusenden?

Erstellt von Bunnychecker vor 11 Jahren Letzter Beitrag vor 11 Jahren 3.189 Views
B
Bunnychecker Themenstarter:in
224 Beiträge seit 2009
vor 11 Jahren
Javascript im WebBrowser ausführen ohne den Request abzusenden?

Hallo,

ich bin auf der Suche nach einer Komponente oder .dll, die es mir ermöglicht Javascript welches auf eine DOM-Komponente zugreift, auszuführen ohne einen Request (also offline) abzusenden.

Ich habe ein Stück Html-Quelltext inklusive Javascript und möchte gerne verschiedene Funktionen des Javascripts ausführen und eventuelle Resultate auslesen.

Wenn ich das richtig verstanden habe, braucht man eine Kombination aus Javascript-Engine und dem Html Agility Pack. Also im Prinzip einen WebBrowser, der keine Requests absendet.

Was stehen mir für Möglichkeiten offen?

LG

2.891 Beiträge seit 2004
vor 11 Jahren

Du kannst doch einfach webBrowser.DocumentText oder webBrowser.Document.... setzen.

B
Bunnychecker Themenstarter:in
224 Beiträge seit 2009
vor 11 Jahren

Danke für deine Antwort.

webBrowser.Document

ist schreibgeschützt und

            WebBrowser webBrowser = new WebBrowser();
            webBrowser.DocumentText = "<html>TEST</html>";
            // webBrowser.DocumentText == "<HTML></HTML>\0"

bleibt immer

<HTML></HTML>\0
795 Beiträge seit 2006
vor 11 Jahren

...bleibt immer

<HTML></HTML>\0  

Probiers mal mit validem HTML

<html>
<head>
<title>Test</title>
</head>
<body>
<h1>Test</h1>
</body>
</html>

Gruß, Christian.

`There are 10 types of people in the world: Those, who think they understand the binary system Those who don't even have heard about it And those who understand "Every base is base 10"`
B
Bunnychecker Themenstarter:in
224 Beiträge seit 2009
vor 11 Jahren
WebBrowser webBrowser = new WebBrowser();
            webBrowser.DocumentText = "<html><head><title>Test</title></head><body><h1>Test</h1></body></html>";
            // webBrowser.DocumentText == "<HTML></HTML>\0"            

Funktioniert leider auch nicht.

Jedenfalls habe ich gehört, dass deshalb auch u.a. das Html Agility Pack verwendet wird. Jedoch unterstützt das Html Agility Pack kein Asuführen von Javascript.

16.828 Beiträge seit 2008
vor 11 Jahren

Dann benutz WebKit.NET

B
Bunnychecker Themenstarter:in
224 Beiträge seit 2009
vor 11 Jahren

Kann ich damit auch Javascriptfunktionen ausführen?

Ich bin nämlich über diesen Thread nun gestolpert, nachdem ich vergeblich versucht habe eine Javascriptfunktion mit WebKit aufzurufen:

http://sourceforge.net/projects/webkitdotnet/forums/forum/939856/topic/4375628

Vielleicht habe ich mich bisher auch nur dumm angestellt?

            var browser = new WebKitBrowser();
            browser.DocumentText = "<html><head><title>Test</title></head><body><script type=\"text/javascript\"> function Test() {}</script></body></html>";
            var test = browser.Document.InvokeScriptMethod("Test");

Fehlermeldung:
COMException: Beim Aufruf einer COM-Komponente wurde ein HRESULT E_FAIL-Fehler zurückgegeben.

795 Beiträge seit 2006
vor 11 Jahren

Der WebBrowser muss auf einer Form liegen, damit er funktioniert. Ich nehme an, dass du das nicht hast (jedenfalls nicht in deinem Snippet)...

`There are 10 types of people in the world: Those, who think they understand the binary system Those who don't even have heard about it And those who understand "Every base is base 10"`
B
Bunnychecker Themenstarter:in
224 Beiträge seit 2009
vor 11 Jahren

Das ist richtig, aber ich will ja die Javascript/DOM Engine eigentlich gar nicht auf eine Form legen.

3.170 Beiträge seit 2006
vor 11 Jahren

Hallo,

Der WebBrowser muss auf einer Form liegen, damit er funktioniert.

Ich weiß nicht, wie das bei dem WebKitBrowser aussieht, aber beim System.Windows.Forms.WebBrowser funktioniert's auch ohne Form. Was man allerdings braucht, ist eine Nachrichtenschleife 8)

@BunnyChecker
da gibt's übrigens auch in WebBrowser.Document eine InvokeScript-Methode. Vielleicht klappt's mit der. Um zu verhindern, dass ein Request ausgelöst wird, müsste es reichen, Dich ans Navigating-Event des WebBrowsers zu hängen und dann dort in den EventArgs Cancel=true zu stezen.

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca