![]() |
Javascript ohne TWebBrowser ausführen
Hallo,
ich lade aus meiner TK-Anlage Faxe runter. Hierzu gibt es bereit einen ![]() Jetzt stehe ich aber vor dem Problem, dass ich die bereits abgerufenen Faxe löschen muss. In der TK-Anlage wird das über eine Weboberfläche gemacht. Diese wiederum löscht die Daten offenbar mittels Javascript, wobei <A CLASS='list' HREF='javascript:bttnDeleteEntry(3, 512, "77")';> entscheidend sein dürfte:
Code:
Ich möchte ebenso wie beim Download gern auf TWebBrowser verzichten. Ich habe einige Ansätze gefunden, wie es damit geht.
<A HREF='/fax/001/11_16_14_39_u_0003.exe'><IMG SRC='/images1/pict_cl_fax.gif' TITLE='Anzeigen (110 kB)' BORDER='0'></A><A HREF='/fax/001/11_16_14_39_u_0003.sff'><IMG SRC='/images1/pict_save.gif' TITLE='Speichern (37 kB)' BORDER='0'></A><A CLASS='list' HREF='javascript:bttnDeleteEntry(3, 512, "77")';><IMG SRC='/images1/pict_del_entry.gif' WIDTH='20' HEIGHT='17' BORDER='0' NAME='' TITLE='Eintrag löschen'></A>
Gibt es eine Möglichkeit, den Code ohne TWebBrowser auszuführen? Falls ja, bitte ich ausdrücklich um Hinweise. Danke, Alex |
AW: Javascript ohne TWebBrowser ausführen
Schau mal nach, wie die JavaScript-Methode selbst aussieht. Ich denke fast, dass da mit AJAX gearbeitet wird, die dem Server ein gewisses Kommand zukommen lässt. Ohne die JavaScript-Methode können wir leider nichts anfangen.
--EDIT Mein Ansatz wäre es nun, zu schauen, wie der Browser mit dem Server kommuniziert und das dann nachzubauen. |
AW: Javascript ohne TWebBrowser ausführen
Hallo s.h.a.r.k,
Danke für die Antwort. Zitat:
|
AW: Javascript ohne TWebBrowser ausführen
Mit Wireshark. Oder (etwas komfortabler wie ich finde) mit
![]() |
AW: Javascript ohne TWebBrowser ausführen
Schau doch einfach mal im Quellcode nach der JavaScript-Methode. Im Firefox öffnet dir Strg+U den Quellcode der Website. Dort (oder in den Unterdateien) kannst du die JS-Methode finden! Und bzgl. meiner Vermutung bzgl AJAX: Da reicht auf jedenfall die Firebug-Erweiterung für Firefox. Dort gibt es dann einen Tab "Netzwerk", wo man alles sieht, was man brauch. AJAX-Requests werden auch in der Konsole dargestellt, soweit ich weiß.
-- EDIT Wireshark etc. wäre hier mit Kanonen auf Spatzen geschossen ;) |
AW: Javascript ohne TWebBrowser ausführen
Danke. Ich habe jetzt Firebug installiert. Wie muss ich das benutzen?
Ich habe gemäß Deiner Anleitung den Tab "Netzwerk" gewählt. Dort gibt es nun die SubTabs "Alle | HTML | CSS | JS | XHR | Grafiken | Flash". Ich bin dann zu "JS" gewechselt und habe auf "Eintrag löschen" geklickt. Es wurde aber nichts angezeigt, was ich verwursten könnte. Was mache ich verkehrt? |
AW: Javascript ohne TWebBrowser ausführen
Wenn das Netzwerk-Modul aktiviert ist, dann siehst du wie die Kommunikation zwischen Browser und Server abläuft, also welche Anfragen an den Server gehen und wie diese beantwortet werden. Nun navigiere im Browser eben auf die Seite und drücke den Löschen-Button. Wenn ein Seiten-Reload erfolgt, dann wird wohl nur ein GET-Request an den Server geschickt. Wenn kein Seiten-Reload erfolgt, dann ists wohl ein AJAX-Request.
Klickst du auf das Plus vor dem Delete-Request, dann kannst du einsehen, welche Daten an den Server geschickt werden. Und das kannst du nachbauen. -- EDIT Wenn Jabber oder ICQ hast, dann schick mir einfach eine PN, dann können wir das auch da klären. |
AW: Javascript ohne TWebBrowser ausführen
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Zitat:
[EDIT]Ein Fax habe ich noch zum Löschen. Dann muss ich erst wieder warten, bis etwas bei uns eingeht :-)[/EDIT] Jabber oder ICQ habe ich nicht und möchte ich auch nicht unbedint wegen dieser Sache hier installieren. |
AW: Javascript ohne TWebBrowser ausführen
Hinter dem "Eintrag löschen"-Knopf steht die JS-Funktion bttnDeleteEntry. Diese ist unten definiert in 02_Antwort.txt, die URL, die da aufgerufen wird, wäre dann "/vphone/vp-list-mailin.asp?mode=11&entry='+entry+'&rnr='+rnr+'&typ e='+type+'&read=" - dort müssen dann drei Parameter rein.. die müsstest du noch mitgeben bzw. herausfinden, was sie bedeuten :P
HTH |
AW: Javascript ohne TWebBrowser ausführen
Zitat:
Code:
Wobei 3 für den Eintrag Nr. 3 steht, ich zur 512 keine Ahnung habe und "77" für Faxe steht. Die Anlage verwaltet auch Telefongespräche, Nachrichten etc. pp.
<A CLASS='list' HREF='javascript:bttnDeleteEntry(3, 512, "77")';> ... </A>
Wenn ich Dein Post also richtig verstehe, bedeutet das, dass ich Bezug nehmend auf mein obiges Beispiel "nur"
Code:
an den Server absetzen muss und der Eintrag ist gelöscht? Wie sende ich das ohne TWebBrowser? Muss ich da die '' bzw. "" mit angeben oder reicht das auch so?
http://192.168.1.2/vphone/vp-list-mailin.asp?mode=11&entry=3&rnr=512&typ e="77"&read="
Gruß & Dank, Alex |
AW: Javascript ohne TWebBrowser ausführen
Das musst du mit einer x-beliebigen Socket/HTTP-Komponente an den Webserver schicken (die Indys werden oft empfohlen). Die aufzurufende URL müsste dann z.B. so aussehen:
Code:
, also ohne irgendwelche " oder '.
http://192.168.1.2/vphone/vp-list-mailin.asp?mode=11&entry=3&nr=512&type=77&read=
|
AW: Javascript ohne TWebBrowser ausführen
Wichtig ist dabei auch, dass das Ergebnis abgefragt wird! Die
![]() BTW: gibts eigentlich keine API für diese Anlage?! Denn sobald der Hersteller der Anlage ein Update raus bringt, kann unter Umständen deine Software nicht mehr funktionieren. Mir ist schon klar, dass das mit einer API auch passieren kann, da ist aber das Risiko geringer. |
AW: Javascript ohne TWebBrowser ausführen
Zitat:
![]() |
AW: Javascript ohne TWebBrowser ausführen
Zitat:
|
AW: Javascript ohne TWebBrowser ausführen
Wieso drei? Er referenziert doch genau einen -> Anker im Link! Den mittleren halt ;)
|
AW: Javascript ohne TWebBrowser ausführen
Zitat:
Die Frage zur API muss ich dann mal an den Telefon-Menschen weiterleiten. Im Dezember soll sowieso ein Update aufgespielt werden. Folgender Code kommt zwar bis zur letzten Bedingung durch und liefert mit ein 'True' zurück. Das Fax bleibt aber beharrlich in der Anlage und nicht dort wo sie hinsollte - ins Nirvana:
Delphi-Quellcode:
Wo liegt mein Fehler?
Function DeleteItem(sURL, ItemEntry, ItemNr : String): Boolean;
Var S : String; hSession : hInternet; hConnect : hInternet; hRequest : hInternet; Begin Result:=False; hSession:=InternetOpenA('InetURL:/1.0', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0); If (Assigned(hSession)) Then Begin hConnect:=InternetConnectA(hSession, PChar(sURL), INTERNET_DEFAULT_HTTP_PORT, nil, nil, INTERNET_SERVICE_HTTP, 0, 0); If (Assigned(hConnect)) Then Begin hRequest:=HttpOpenRequestA(hConnect, 'POST', PChar(sURL), nil, nil, nil, INTERNET_SERVICE_HTTP, 0); If (Assigned(hRequest)) Then Begin S:='http://' + sURL + '/vphone/vp-list-mailin.asp?mode=11&entry=' + ItemEntry + '&nr=' + ItemNr + '&type="77"&read= '; Result:=HttpSendRequestA(hRequest, nil, 0, Pointer(S), Length(S)); InternetCloseHandle(hRequest); End; InternetCloseHandle(hConnect); End; InternetCloseHandle(hSession); End; End; procedure TForm1.FormCreate(Sender: TObject); begin ShowMessage(BoolToStr(DeleteItem('192.168.1.2', '0', '512'), True)); end; Jetzt muss ich morgen vermutlich doch mal zum Siffer greifen und nachsehen, was exakt die Software an den Server in der Anlage sendet. Gruß, Dank & Gute Nacht, Alex |
AW: Javascript ohne TWebBrowser ausführen
Zitat:
Ich würde es mal mit synapse probieren. Da braucht auch nichts installiert werden und nach meinen Erfahrungen sehr sauber und extrem stabil. |
AW: Javascript ohne TWebBrowser ausführen
OK.
![]()
Delphi-Quellcode:
Zwar löscht er mir den Eintrag auch nicht. Aber ich bekomme eine html-Datei zurück, die mir mögliche Fehler verrät:
procedure TForm1.FormCreate(Sender: TObject);
begin With TDownloadURL.Create(self) Do Try URL:='http://192.168.1.2/vphone/vp-list-mailin.asp?mode=11&entry=0&nr=512&type="77"&read='; FileName:='Dummy.html'; Try ExecuteTarget(nil); ShowMessage('Executed OK'); Except On E : Exception Do ShowMessage(E.Message); End; Finally Free; End; end;
Code:
Wenn ich das richtig verstehe, ist mein 'POST' angekommen und der Server ist sogar noch so nett und sagt mir, wie ich die Funktion richter Weise benutzen soll. Da ich read= nirgends finden kann, bleibt mir also doch nur ein Shniffer. Oder sehe ich das falsch?
<html><body>
<h2><b>ASP Error</b></h2> vp_list_mailin(mode,entry,rnr,type,read); </body></html> Ich möchte keine anderen Komponenten verwenden (Indys eingeschlossen), wenn und soweit die Chance besteht, dass ich es mit den Bordmitteln hinbekomme. [EDIT] Habe jetzt den Traffic mal mit Live HTTP Headers mitgeschnitten und es hat den Anschein, dass die Variablen vertauscht und die Argumente andere sind. Ich muss jetzt leider warten, bis wieder ein Fax eingeht und werde es dann probieren. Bins schon ganz euphorisch! [/EDIT] Gruß, Alex |
AW: Javascript ohne TWebBrowser ausführen
Zitat:
statt
Code:
müsste es doch
entry=0&nr=512&type
Code:
lauten
entry=0&rnr=512&type
|
AW: Javascript ohne TWebBrowser ausführen
Zitat:
Code:
und
type="77"
Code:
(ohne das zusätzliche r), während es die Funktion umgekehrt und mit r will. Vielleicht eine Falle für Leute, die eine Software für die Anlagen schreiben wollen :lol: Wie auch immer.
nr=512
Es funktioniert jetzt über die URL
Code:
Danke für Eure Hilfe. Ich fasse mal zusammen:
http://192.168.1.2/vphone/vp-list-mailin.asp?mode=11&entry=0&rnr=77&type=512&read=
1. Man kann ein 'POST' ziemlich einfach über TDownloadURL absetzen und damit eine Javascript-Funktion ausführen lassen. 2. Oben steht, wie es insbesondere bei einer OpenCom X320 geht. |
AW: Javascript ohne TWebBrowser ausführen
Zitat:
Denn JavaScript führst du damit ja nicht aus, sondern du hast die Funktionalität der JavaScript-Funktion nachprogrammiert, und die ruft eben eine URL auf (aber anscheinend mit ![]() |
AW: Javascript ohne TWebBrowser ausführen
Zitat:
So gesehen ist aber auch das Thime nicht richtig formuliert, woran bislang keiner Anstoß genommen hat. Es müsste heißen: "Javascript ohne TWebBrowser auf einem http-Server ausführen lassen". Soll ich es ändern? |
AW: Javascript ohne TWebBrowser ausführen
Zitat:
Du machst es hier eben selber, ansonsten führt das JavaScript diese Anfrage aus dem Browser heraus aus (genau genommen surft das JS nur zu der URL, die den Befehl an den Server sendet). Das ganze hat eigentlich nur wenig mit JS zu tun, das, was im Browser abläuft, würde sich wohl auch über einen ganz normalen Link bewerkstelligen lassen. |
AW: Javascript ohne TWebBrowser ausführen
Dass hinter ASP auch Javascript stecken kann, habe ich nicht gewusst :wall:
Von mir aus brauchst du nichts ändern (wenn du nicht möchtest), ich wollte nur vermeiden, das irgendjemand auf die Idee kommt, man könne auf diese Weise irgendwie clientseitiges Javascript ausführen (was du ja afaik mit TWebBrowser gemacht hattest). |
AW: Javascript ohne TWebBrowser ausführen
Ich bin Laie und verstehe das nicht so recht. Dass Java auf dem Client läuft, leuchtet mir noch ein. Sonst müsste ich nicht das JRE installieren. Also erzeuge ich im Grunde nur das Ergebnis eines Java-Scripts und schicke die URL an den Server.
Aber wie nennt man dann das, was auf dem Server passiert? Ich beeinflusse den insofern, als der mein Fax dort löscht.:gruebel: Und das nicht einfach so, sondern erst aufgrund der von mir gesendeten Daten. |
AW: Javascript ohne TWebBrowser ausführen
Zitat:
![]() Zitat:
Du hast HTTP als Protokoll: du schickst eine Anfrage, der Server interpretiert die, macht dementsprechend etwas und schickt dir dann/dabei eine Antwort. Vergleiche es einfach mal mit einem Kommandozeilenprogramm: Dir kann es völlig egal sein, in welcher Sprache es programmiert ist. Du gibst Text rein, der wird verarbeitet, das Programm tut seinen Dienst und gibt dir Text aus. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:46 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz