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
Du kannst doch einfach webBrowser.DocumentText
oder webBrowser.Document...
. setzen.
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
...bleibt immer
<HTML></HTML>\0
Probiers mal mit validem HTML
<html>
<head>
<title>Test</title>
</head>
<body>
<h1>Test</h1>
</body>
</html>
Gruß, Christian.
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.
Dann benutz WebKit.NET
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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.
Der WebBrowser muss auf einer Form liegen, damit er funktioniert. Ich nehme an, dass du das nicht hast (jedenfalls nicht in deinem Snippet)...
Das ist richtig, aber ich will ja die Javascript/DOM Engine eigentlich gar nicht auf eine Form legen.
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