Entwickler-Ecke
Internet / Netzwerk - Hidden Felder mit tWebbrowser auslesen
Klabautermann - Mo 14.03.05 16:57
Titel: Hidden Felder mit tWebbrowser auslesen
Hallo,
ich glaube es kaum, aber heute darf ich eine Abwandlung eines absoluten evergeens fragen.
Ich habe ein Web-Script geschrieben, welches ausgabedaten erzeugt und diese schön Formatiert (HTML/CSS) ausgibt. Paralem möchte ich diese Daten aber auch automatisch auswerden, wenn die Seite über ein kleines tWebbrowser basiertes Programm aufgerufen wird. Um dies zu ermöglichen schreibe ich die Daten (diesesmal ohne Formatierung-Tags) in (HTML-)Formular-Felder.
Sind diese Sichtbar kann sie Problemlos per:
Delphi-Quelltext
1:
| Wert := WebBrowser.OleObject.document.forms.item(0).elements.item('MeinFeld').value; |
auslesen.
Habe ich die Felder aber als
Hidden gekennzeichnet, bekomme ich mit der selben anweisung aber eine zugriffsverletzung.
Daher meine Frage, wie greife ich per tWebbrowser auf hidden Formular Felder zu?
Gruß
Klabautermann
Sprint - Mo 14.03.05 17:15
Titel: Re: Hidden Felder mit tWebbrowser auslesen
Klabautermann hat folgendes geschrieben: |
| Habe ich die Felder aber als Hidden gekennzeichnet, bekomme ich mit der selben anweisung aber eine zugriffsverletzung. |
Eigentlich sollte es da keine Probleme geben. Vielleicht liegt der Fehler irgendwo anders.
Hast du das Feld so
<input name="MeinFeld" type="hidden"> geschrieben? Vielleicht hast du mehr als eine Form?
Klabautermann - Mo 14.03.05 17:41
Hallo,
die HTML-Ausgabeseiten werden aus Template Dateien erzeugt. Ändere ich in der temlpate Datei (der Ergebnis Seite) die Zeile
<input name="getkey" value="%NEWVALUE%"> in
<input type="hidden" name="getkey" value="%NEWVALUE%"> kann ich sie nciht mehr auslesen. Ich bekomme eine "Zugriffsverletzung bei Adresse 004884CF ..." ist das Feld sichtbar, stört es die Optick der Seite, ist aber nicht die möglichkeit das ganze aus zu lesen.
Hier mal eine komplette ausgabeseite mit Hidden Feld:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Test</title> </head> <body text="#000000" bgcolor="#FFFFFF" link="#FF0000" alink="#FF0000" vlink="#FF0000"> <p>Info Text</p> <p><table style="border-width:0px" align="center"><tr><td style="background-color:#C0C0C0; font-weight:bold; font-size:24pt">3207</td><td style="background-color:#A0A0A0; font-weight:bold; font-size:24pt">5100</td><td style="background-color:#C0C0C0; font-weight:bold; font-size:24pt">0120</td><td style="background-color:#A0A0A0; font-weight:bold; font-size:24pt">4530</td><td style="background-color:#C0C0C0; font-weight:bold; font-size:24pt">2001</td><td style="background-color:#A0A0A0; font-weight:bold; font-size:24pt">1000</td><td style="background-color:#C0C0C0; font-weight:bold; font-size:24pt">0767</td></tr></table></p> <form action="./Lizensierung.exe" method="post"> <p align="center"> <input type="hidden" name="ActPage" value="getkey"> <input type="hidden" name="sendkey" value="90011005302000146"> <input type="hidden" name="getkey" value="3207510001204530200110000767"><br> </p> </form> </body> </html> |
Gruß
Klabautermann
Sprint - Mo 14.03.05 17:50
| Klabautermann hat folgendes geschrieben: |
| Ich bekomme eine "Zugriffsverletzung bei Adresse 004884CF ..." ist das Feld sichtbar, stört es die Optick der Seite, ist aber nicht die möglichkeit das ganze aus zu lesen. |
mmh... Ich bekomme keine Zugriffsverletzung. Läuft so wie es soll. Getestet nach deinem HTML Beispiel.
Klabautermann - Mo 14.03.05 18:10
Hi,
ein paar Zeilen höher Frage ich auch noch ohne Probleme das Feld
ActPage ab beim Zugriff auf
getkey will er nicht mehr.
Warum nur?
Hier mal die ensprechnede Procedure:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TfrmMain.WB_RegNavigateComplete2(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant); var SideName : String; begin SideName := WB_Reg.OleObject.document.forms.item(0).elements.item('ActPage').value; if (SideName = 'submitkey') then WB_Reg.OleObject.document.forms.item(0).elements.item('sendkey').value := fSendKey else if (SideName = 'getkey') then begin ShowMessage(WB_Reg.OleObject.document.forms.item(0).elements.item('getkey').value); end; end; |
In der hervorgehobenen Zeile wird die Exception geschmissen allerdings, wie bereits erwähnt, nur wenn das Feld hidden ist. Was stimmt mit diesem Feld nicht? Umbenennen hilft auch nicht :(. Ich versuchte auch bereits den Wert zuerst in einer String Variablen entgegen zu nehmen, wie es beim SideName ja klappt.
Gruß
Klabautermann
Klabautermann - Di 15.03.05 19:46
Hallo,
ich habe die Ursache für den Fehler zwar nciht finden können - dafür aber ein Workaround.
Wenn dich in der Template das Action & das metod Tag weglasse scheind es zu funktionieren. Diese sind in diesem Fall zwar überflüssig, aber stören sollten sie eigendlich nicht.
Naja, auf jeden Fall läuft es jetzt (hoffendlich nciht nur bis zur nächsten änderung am Template), da ist es nciht so schlimm, dass ich verwirrt zurück bleibe. Wenn mir das jemand erklähren könnte währe ich trotzdem dankbar ;).
Gruß
Klabautermann
Julian W. - Mi 05.07.06 16:22
Also ich habe festgestellt, das es oft geht, wenn man
Delphi-Quelltext
1:
| Wert := WebBrowser.OleObject.document.forms.item(0).elements.item('MeinFeld').value; |
in
Delphi-Quelltext
1:
| Wert := WebBrowser.OleObject.document.forms.item(1).elements.item('MeinFeld').value; |
oder einen anderen Wert ändert.. Ich habe kein Plan, was das item(x) genau macht, aber ich vermute mal, man kann damit die form auf der Seite auswählen, also wenn es z.B. 2 forms gibt ne 1 für die 2te form... Ist aber nur eine Vermutung
Highspeeder - Fr 07.07.06 08:41
Titel: Frames
Gibt es da vielleicht Frames ????
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!