Bl1zz4rD (14.06.2013)
-
14.06.2013, 16:12 #1
- Registriert seit
- 03.12.2012
- Beiträge
- 29
Thanked 1 Time in 1 PostWebbrowser inject Javascript in html loaded js
Hallo,
ich habe derzeit ein folgendes Problem und zwar:
Derzeit wird im ganzen Document die funktionen "onunload" "open" usw:
Code:for (int C = 0; C < webBrowser1.Document.GetElementsByTagName("head").Count; C++) { HtmlElement head = webBrowser1.Document.GetElementsByTagName("head")[C]; HtmlElement scriptEl = webBrowser1.Document.CreateElement("script"); IHTMLScriptElement element = (IHTMLScriptElement)scriptEl.DomElement; string alertBlocker = "window.alert = function () { }; window.print = function () { }; window.open = function () { }; window.onunload = function () { }; window.onbeforeunload = function() { };"; element.text = alertBlocker; head.AppendChild(scriptEl); }
Code:<script src="/js/jquery.js"></script>
Nun soll aber das Programm alle .js im Document suchen und injecten.
greets,
Bl1zz4rD
-
14.06.2013, 16:36 #2
- Registriert seit
- 18.03.2013
- Beiträge
- 481
Thanked 264 Times in 168 PostsAW: Webbrowser inject Javascript in html loaded js
Alle JavaScript-Dokumente extra öffnen lassen und dann die Funktionen injecten. Oder was genau meinst du?
-
14.06.2013, 16:37 #3
- Registriert seit
- 03.12.2012
- Beiträge
- 29
Thanked 1 Time in 1 PostAW: Webbrowser inject Javascript in html loaded js
Nicht öffnen, die sollen direkt injected werden, nun man kann es auch als öffnen bezeichnen.
-
14.06.2013, 16:44 #4
- Registriert seit
- 15.11.2011
- Beiträge
- 6.210
- Blog Entries
- 5
Thanked 9.132 Times in 3.006 PostsAW: Webbrowser inject Javascript in html loaded js
Direkt mit dem WebBrowser-Control von .NET wird das nicht möglich sein. Du müsstest die Definition deiner onload-Funktion injecten, bevor die externen JS-Dateien geladen und durch den Parser gejagt werden. Und dafür fehlt dir wohl das entsprechende Event, zumindest ist mir beim .NET Control keines bekannt.
Ich würde die Seite außerhalb des WB-Controls laden, die externen JS-Dateien einzeln laden, deine Funktion injecten und dann an der jeweiligen Stelle einfach als Inline-JS wieder einfügen, sofern da bezüglich caching nichts dagegen spricht. Weiß ja nicht was du konkret vor hast.
xOneDirectionx meinte denke ich dasselbe.
Du könntest dich natürlich auch über alternative WB-Controls informieren, zb geckofx auf Basis von Firefox. Vielleicht findest du da entsprechende Events für dein Vorhaben. Wäre generell zu empfehlen da das .NET Control auf einer uralten IE-Version basiert (selbst im Aktuellen 4.5er ist das noch der IE 7 oder 8). Das kann natürlich zu Problemen führen, da die alten IE Versionen dafür bekannt sind in vielen Fällen nur mit Extrawurst so zu funktionieren wie sie das sollen. Aus dem Grund machen sich viele Webmaster gar nicht die Mühe, alle Probleme die es mit alten IE Versionen gibt zu fixxen. Hier in UH wird generell nix für den IE optimiert. Höchstens für den IE10, alles drunter ist eine Beleidigung für den Betriff 'Browser' xD
-
The Following User Says Thank You to DMW007 For This Useful Post:
-
14.06.2013, 17:06 #5
- Registriert seit
- 03.12.2012
- Beiträge
- 29
Thanked 1 Time in 1 PostAW: Webbrowser inject Javascript in html loaded js
Ok, danke schon mal, vll ist die Methode die ich hier versuche auch viel zu hoch fuer mein Vorhaben.
Wenn ich auf eine bestimmte Seite navigiere und dann von dieser z.B auf Google.de gehen moechte, ist das Problem, dass der User dann diese laestige messagebox sieht und solabge die nicht angeklickt wurde mit "Seite verlassen" wird die Seite nicht verlassen und nach ner Zeit haengt sich auch das programm dann auf wegen Multithreading.
Und wenn ich ueber registry einfach ganz js deaktiviere funktioniert die Seite nicht mehr so, wie sie soll
greets,
Bl1zz4rDGeändert von Bl1zz4rD (14.06.2013 um 17:07 Uhr)
-
14.06.2013, 17:22 #6
- Registriert seit
- 15.11.2011
- Beiträge
- 6.210
- Blog Entries
- 5
Thanked 9.132 Times in 3.006 PostsAW: Webbrowser inject Javascript in html loaded js
Ich seh grad es gibt sogar ne Funktion dafür, brauchst also gar nicht manuell am Quelltext rumfummeln:
string alertBlocker = "window.print = function emptyMethod() { }; window.alert = function emptyMethod() { }; window.open = function emptyMethod() { };";
this.Document.InvokeScript("execScript", new Object[] { alertBlocker, "JavaScript" });
Probier das mal, soll bei anderen funktioniert haben. Weiß jetzt aber nicht ob die mit inline-JS oder auch mit externem JS gearbeitet haben.
Was willst du denn konkret realisieren? Evtl findet sich da auch ne sauberere Lösung. Gibt zb auch die Möglichkeit die Anfragen manuell zu senden. Dann hast du mit JS keine Probleme (sofern du es nicht zwingend geparst benötigst) weil das weder automatisch geladen noch geparst wird.
Die Logik sollte generell in einem von der GUI getrennten Thread ausgelagert werden. Erst Recht wenn man in der Logik Vorgänge ausführen will, die den Thread schon mal für längere Zeit blockieren können. Du musst bedenken, dass da im Hintergrund ein kompletter Browser läuft, der Ressourcen herunterläd, JS parst etc.
-
14.06.2013, 18:08 #7
- Registriert seit
- 03.12.2012
- Beiträge
- 29
Thanked 1 Time in 1 PostAW: Webbrowser inject Javascript in html loaded js
Diese funktion die du oben genannt hast, benutze ich neben dem da oben auch schon und es finktioniert nicht, wenn ich am Sonntag wieder zu Hause bin, kann ich gerne eine von solcher Seite mal posten.
-
16.06.2013, 15:45 #8
- Registriert seit
- 03.12.2012
- Beiträge
- 29
Thanked 1 Time in 1 PostAW: Webbrowser inject Javascript in html loaded js
satoshicircle.com
Das wäre so eine Seite, bei der es nicht funktioniert, die Funktion steht in der jQuery.js
Bei -> Head -> <script src="/js/jquery.js"></script>
-
16.06.2013, 16:11 #9
- Registriert seit
- 15.11.2011
- Beiträge
- 6.210
- Blog Entries
- 5
Thanked 9.132 Times in 3.006 PostsAW: Webbrowser inject Javascript in html loaded js
Das ist auch kein klassischer Aufruf der alert-Funktion sondern ein Eventhandler:
$(window).on("beforeunload", function () {
return "Make sure you save your URL in order to access your account at a later time."
})
Eine Möglichkeit wäre
$(window) = null;
Ob das im Bezug auf das restliche JS so sinnvoll ist sei aber mal dahingestellt.
Bevor man da weiterguckt wärs aber sinnvoll zu wissen was du überhaupt vor hast. Ich vermute mal du willst da bei irgendwelchen Spielen automatisch setzen oder etwas in der Art. Da wäre es wohl sinnvoller die HTTP-Anfragen selbst zu senden. Wie bereits gesagt hast du dann mit JS auch keine Probleme weil du keine JS Engine hast. Das kann aber natürlich auch ein Nachteil sein wenn du darauf angewiesen bist weil wesentliche Funktionen über JS laufen und der Aufwand zu hoch wäre die selbst zu schreiben. Wobei ich das bei so einer Spielothek-Seite eher nicht vermute, die werden das über HTTP-Abfragen absenden. Vielleicht noch über Ajax, aber das spielt ja keine Rolle.
-
The Following User Says Thank You to DMW007 For This Useful Post:
Bl1zz4rD (16.06.2013)
-
16.06.2013, 18:45 #10
- Registriert seit
- 03.12.2012
- Beiträge
- 29
Thanked 1 Time in 1 Post
Ähnliche Themen
-
C# Webbrowser Control eigener Browser
Von Sido im Forum .NetAntworten: 1Letzter Beitrag: 22.11.2013, 23:35 -
C# WebBrowser Control DropDownMenü
Von RaidPower im Forum .NetAntworten: 4Letzter Beitrag: 27.09.2013, 20:04 -
Eigenen Webbrowser erstellen
Von Plaxo im Forum HochsprachenAntworten: 5Letzter Beitrag: 26.04.2013, 17:29 -
C# webBrowser dropdown select
Von Bl1zz4rD im Forum .NetAntworten: 2Letzter Beitrag: 05.04.2013, 12:08 -
[eBook] HTML Seminar - HTML für erfolgsorientierte
Von DMW007 im Forum eBooksAntworten: 0Letzter Beitrag: 14.10.2012, 20:07
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.