schorschi Geschrieben 18. September 2006 Geschrieben 18. September 2006 Hallo miteinander. Ich programmiere gerade mit VC6.0 (C++) unter W2K eine Art Browser welcher es mirr erlauben soll, Internetseiten zu lesen. Ich sende Header an den jeweiligen Server und bekomme auch die antworten welche ich auswerte. Bei der Webprogrammierung kann man ja auch per Javascript die Cookies schreiben, auslesen manipulieren. Genau da liegt mein Problem. Die Cookies welche per Header gesendet werden kann ich soweit verarbeiten, allerdings die veräderung der Cookies welche beim Aufruf der Webseite im Browser durch das Javascript veranlaßt werden, kann ich nicht verarbeiten. Natürlich kann man die Webseite mühselig durcharbeiten und die Sache zu Fuß erledigen, allerdings laden Browser ja auch die Scripte und verarbeiten alles korrekt und dynamisch. Hat jemand eine Idee wie ich das Thema angehen soll oder kann mir jemand links zu einem Portal nennen welche Browser entwickeln, wo man sich schlaumachen kann. Ich weiß nicht ob dieser Thread hier richtig platziert ist. Gruß Joerg Zitieren
Aiun Geschrieben 18. September 2006 Geschrieben 18. September 2006 du kannst ja versuchen die gängigen browserengines direkt anzusteuern. Ansonsten machen die wohl nichts anderes als String lesen und parsen..... Zitieren
schorschi Geschrieben 18. September 2006 Autor Geschrieben 18. September 2006 Tja ansteuern von Engines habe ich noch nie gemacht. hört sich interessant an. Zum parsen.., Na ja da wäre halt interessant zu wissen wie ein Browser arbeitet. Da ich halt die gleiche arbeit machen muß. Ich denke mal das parsen an sich ist nicht das Problem. Ich stelle mir vor, eine Htmlseite ruft das Script auf und die darin enthaltene Funktion.Die Funktion wird im Script gefunden (Bis dahin wüßte ich den Ansatz), aber : Nun müßte ich den Inhalt der Scriptfunktion auslesen und diesen Inhalt "interpretieren" sprich ausführen. Und da liegt das Problem für mich. Angenomen dort in der Scriptfunktion steht : ... i++; ... Wie kriege ich meinen Quellcode dazu "i" zu inkrementieren ? Für mich ist es in dem Moment nur eine Variable vom Typ CString oder char*, fertig. Ich kann, soweit ich weiß, in C++ nicht wie in php eine Variable in einer Variblen verarbeiten. Ich denke mal in php wäre es weiniger ein Thema, aber ich kann nicht damit arbeiten. Ich brauche eine ausführbare *.exe Ganz davon ab, das ich im Augenblick auch noch nicht weiß wie ich gesammte Dateien downloade per C++ und auf dem Rechner speicher, sprich die Scripte. Datenströme per Socket ok, aber ganze Dateien ? Aber ich denke das ist das kleinste übel. Zitieren
Amstelchen Geschrieben 18. September 2006 Geschrieben 18. September 2006 du hast dir da zeimlich viel vorgenommen wieso erfindest du das rad neu und partizipierst nicht an einem der ungezählten open source-projekte, schaust dich in den developer communities von z.b. firefox und konsorten um: dort solltest du zumindest einen blick auf die rendering engine erheischen können und siehst auch, wie ein browser mit der socket-schnittstelle (z.b. winsock) zusammenarbeitet. s'Amstel Zitieren
Aiun Geschrieben 18. September 2006 Geschrieben 18. September 2006 deine Exe muss halt die ganzen befehle erkennen. in dem fall eben so eine Art Regular expression "([A-Za-z0-9])\+\+". das i als Variable erkennen (falls nicht schon im script per VAR definiert) durch das ++ als Zahl interpretieren und dann +1 das sowas ein haufen arbeit ist,. ist wohl ein grund warum es nicht 10.000 Browser gibt ^^ Zitieren
geloescht_JesterDay Geschrieben 18. September 2006 Geschrieben 18. September 2006 aber : Nun müßte ich den Inhalt der Scriptfunktion auslesen und diesen Inhalt "interpretieren" sprich ausführen. Und da liegt das Problem für mich. Angenomen dort in der Scriptfunktion steht : ... i++; ... Wie kriege ich meinen Quellcode dazu "i" zu inkrementieren ? Du sagst doch alles... du musst die Seite eben in deinem Code korrekt interpretieren. Ich geh jetzt einfach mal von einer kleinen HTML Seite mit etwas Javascript im Head aus, z.B. <html> <head> <title>Interpretier mich!</title> <script type="text/javascript"> alert("Super!"); </script> </head> <body> Hallo </body> </html> Diesen Text bekommst du vom Browser gesendet. Ein Browser macht jetzt nichts anderes, als dass er diesen Text jetzt eben entsprechend verarbeitet. Als erstes z.B. sucht er den Inhalt zw. den Title-Tags und schreibt den oben in die Caption des Fensters. Dann verarbeitet er den Rest vom Header. In dem Fall findet er nur einen Script Bereich. Es wird also nachgesehen, was für ein Script das ist, hier text/javascript. Der Inhalt zw. den Script-Tags wird also an die Javascript-Verarbeitung weitergegeben. Javascript ist, wie du richtig gesagt hast, eine Interpreter-Sprache. D.h., der Quelltext wird von Anfang bis Ende Schritt für Schritt durchgegangen und ausgeführt. Jede Sprache hat eine feste Syntax, und danach werden die Zeilen dann verarbeitet. In dem Fall gibt es nur eine Zeile, die Zeile alert(...). Dein Code findet also den Befehl alert und ruft entsprechend eine Funktion von dir auf, die dann das tut, was man von der JAvascript Funktion "Alert" erwartet, also z.B. ein ShowMessage(...) aufrufen. Wenn z.B. eine Schleife im Code gefunden wird, muss dein Code eben alles was in der Schleife steht entsprechend oft ausführen und dabei natürlich selber für den Fortschritt der Zählvariable sorgen etc. Einen eigenen Javascript-Interpreter zu schreiben ist keine kleine Sache. Aber im Prinzip auch nicht so schwer. Wenn du ganz klein Anfangen willst, schreib doch deine eigene Interpretersprache. Dazu machst du eine Exe, die eine Textdatei lädt und deren Inhalt verarbeitet. Die Befehle, die die Sprache kennt kannst du selbst bestimmen, ganz primitiv kennt die Sprache nur 3 Befehle, die durch die Ziffern 1, 2 und 3 dargestellt werden. Als Syntaxregel muss jede Zeile einen Befehl enthalten und darf nur maximal 1 Befehl enthalten. Dabei soll Befehl 1 ein "Hallo" anzeigen, Befehl 2 soll einmal Biepen und Befehl 3 zeigt ein "Ciao" an. In deiner Exe gehst du diesen Text durch, wenn die Zeile eine 1 enthält machst du ein ShowMessage("1"); bei einer 2 ein MessageBeep und bei einer 3 ein ShowMessage("3"). Ein Programm in deiner Sprache sähe dann z.B. so aus: 1 2 3 Was es tun würde kannst du ja denke ich erkennen Was ich in der Schule mal gemacht hab, war eine Art Assembler-Interpreter (der am Ende aber doch schon fast ein Compiler war). Das Programm hat einfach eine kleine CPU simuliert und einen kleinen Speicherbereich. In der CPU gibt es eine Speicherstelle mit der gerechnet werden kann (wie real eben). Als Befehl gab es nur grundlegende Befehle wie ADD, SUB, MOVE und so. Man konnte damit dann z.B. eine Zahl in die aktive Speicherstelle der CPU schreiben und mit ADD (bzw. SUB) um 1 erhöhen (bzw. verringern) und dann wieder woandershinschreiben. Wenn man 5 addieren wollte musste das eben 5mal geschehen und dabei natürlich noch ein weiterer Zähler mitlaufen (eine Zahl 5, die bei jedem Durchgang um 1 verringert wurde, bis sie 0 war). Als Prüfungen gab es glaub ich nur die Prüfung, ob die Speicherstelle 0 ist. Dann wurde der Befehl an nächster Stelle ausgeführt, ansonsten der an der übernächsten. Wir haben das dann noch so erweitert, dass wir Variablen eingeführt haben und Sprungstellen. Dazu musste am Anfang das Programm nicht nur in den "Speicher" geladen werden, sondern eben entsprechend vorbereitet. Alle Variablenwerte wurden hinten ans Ende geschrieben und die Variablennamen diesen Speicherstellen zugewiesen (nur in unserer Exe, also im speicher wurden die Verweise auf die Variable einfach durch dir richtige Speicherstelle ersetzt). Dasselbe mit eventuellen Sprungmarken. So ein Interpreter ist überhaupt nicht schwer oder kompliziert, im Prinzip. Aber eine Sprache wie z.B. Javascript ist halt schon was ausgereifter Zitieren
schorschi Geschrieben 18. September 2006 Autor Geschrieben 18. September 2006 @ Amstelchen Hast ja recht, deshalb frag ich ja. Ich möchte halt erfahren wo und welche Gruppen sich mit Browserprogrammierung beschäftigen um eventuell dort Anschluß zu erhalten @Aiun Sowas hatt ich mir fast gedacht, so wie die Prüfung einer Emailadresse @JesterDay Danke für Deine ausführliche Antwort. Ich werde wohl eine klasse erstellen welche mir eine Befehle interpretiert, scheint die beste Lösung zu sein. Zum Glück muß ich nur eine Handvoll Befehle wiedererkennen. Ich muß ja keinen kompletten Browser emulieren Hat von euch einer 'nen Tipp wie ich die Datei downloade und mit eigenem Namen abspeichern kann ? Ich weiß das geht jetzt wieder sehr speziell Richtung C++... Danke nochmal an euch für die Antworten Zitieren
M.A.Knapp Geschrieben 18. September 2006 Geschrieben 18. September 2006 @schorschi: Ich hab das Gefühl, als würden dir noch einige Grundlagen zu Netzwerk- und File-I/O fehlen. Für JavaScript mußt du eben einen Interpreter schreiben der natürlich wieder aus mehrern Teilen besteht. Das ist natürlich ein großes Kapitel für sich. Außer du verwendest eine bereits fertige JS-Engine Es gibt sicherlich Vorgaben, wie ein JavaScript & Cookiefähiger Browser implementiert werden soll. Die JavaScript Spezifikation: http://www.ecma-international.org/publications/standards/Ecma-262.htm Cookies: http://tools.ietf.org/html/rfc2109 http://tools.ietf.org/html/rfc2965 Aber erklär uns mal, was du genau machen möchtest. Zitieren
schorschi Geschrieben 19. September 2006 Autor Geschrieben 19. September 2006 Netzwerkprogrammierung, sprich socketaufbau datenaustausch auch über ssl bekomme ich hin, obwohl ich die Grundlagen lieber besser beherschen würde, aber es funktioniert. Wie ich Dateien speichern und benennen kann weiß ich auch. Die kombination beider, den download einer Datei und das anschließende speichern der Datei meine ich. Vielleicht drücke ich mich auch schlecht aus, oder der Weg ist zu simple das andere ein Problem damit sehen. File I/O als Stream, ok habe ich noch nicht gemacht. Was ich machen möchte habe ich bereits oben beschrieben, Html seite anfordern und die Cookiemanipulation des Javascriptes der Seite emulieren. Zitieren
Segfault_ii Geschrieben 28. September 2006 Geschrieben 28. September 2006 Vielleicht hilft dir das ja? http://websvn.kde.org/branches/KDE/3.5/kdelibs/kjs/ Ich weiß es nicht genau, aber ich meine der Code ist LGPL lizenziert. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.