speichern eines CGI-Ergebnisses in einer Variablen
Clemens Rohrer
- javascript
0 Cheatah
Liebes Forum,
Ich habe zwei Frames. Im einen rufe ich ein CGI auf, dessen Ergebnis im anderen Frame dargestellt wird. Im ersten frame habe ich zudem eine JScript Function, die mir den Inhalt des anderen Frames, also das Ergebnis des CGI auf der Platte lokal speichert. Das speichern funktioniert bei lokalen .htm Seiten tadellos. Auf den Inhalt des zweiten Frames (CGI Ergebnis) greife ich mittels
var text = parent.frames[1].document.all.tags("html")[0].outerHTML;
Leider wird mir auf meinem Rechner der Zugriff auf den Inhalt des Frames mit dem CGI Ergebnis verweigert. Vielleicht kann ich aber überhaupt das Ergebnis des CGI Aufrufes anstatt es im Browser darzustellen direkt einer Variablen zuordnen , um es dann abzuspeichern. Weiß jemand wie?
Schon einmal im Forum angedacht, auch von Stefan Münz, unter
http://www.teamone.de/selfhtml/sfarchiv/1999_2/t03442.htm#a16541
Hi,
var text = parent.frames[1].document.all.tags("html")[0].outerHTML;
schlecht, weil nicht mit Netscape lauffähig...
Leider wird mir auf meinem Rechner der Zugriff auf den Inhalt des Frames mit dem CGI Ergebnis verweigert. Vielleicht kann ich aber überhaupt das Ergebnis des CGI Aufrufes anstatt es im Browser darzustellen direkt einer Variablen zuordnen , um es dann abzuspeichern. Weiß jemand wie?
Das hat wenig mit CGI zu tun. Ich vermute vielmehr, daß der Domainname der einzelnen Frames (und wenn ich mich nicht irre auch von parent) _exakt_ übereinstimmen müssen, es aber nicht tun. Hier mußt Du Abhilfe schaffen.
Ich weiß übrigens nicht genau, was Dein obiger JavaScript-Code macht (mit Dingen, die nicht in beiden großen Browsern funktionieren bzw. einfache Varianten haben, beschäftige ich mich nicht). Wenn ich es richtig sehe, hast Du aber nur eine Ausgabe, sagen wir die IP-Adresse des Benutzers oder ein Counterstand, die Du mit JavaScript auswerten willst. Dazu sehe ich zwei Lösungsansätze:
a) Du läßt das Script einen kompletten HTML-Code ausgeben, in dem ein <script>-Bereich steht. Dort definierst Du die Variable direkt als "var text = 4711;" und sprichst sie mit "parent.frames[1].document.text" an.
b) Du läßt das Script eine Datei vom Typ "application/x-javascript" ausgeben, welche die Variable wie bei a) enthält, nur ohne HTML-Codes aller Art (einfach nur die Variablendeklaration). Dies bindest Du ohne Frameset in die Datei mit <script src="script.pl" language="JavaScript" type="text/javascript"> ein.
Wenn ich mit meiner Vermutung zu Deiner Intention richtig liege, empfehle ich Dir Methode b) :-)
Cheatah
Hi Cheatah
var text = parent.frames[1].document.all.tags("html")[0].outerHTML;
ordnet der Variablel text den ganzen html und Text-Inhalt des frame[1] zu. Das ist in meinem Fall ein Grundbuchsauszug, den ich abspeichern will (in JScript).Die Zuordnung funktioniert nur im MSIE 5.0, was in diesem Fall von mir sogar gewünscht ist, weil ich sowieso in der gleichen Seite XML verwende. Ich schreibe keine Seite fürs WWW, sondern ein Programm, das sammt dem MSIE 5.0 bei den Kunden installiert wird.
"var text = 4711;" Frage: Bist Du aus Innsbruck? 4711...
Der Inhalt der Variablen text ändert sich verständlicherweise bei jeder Grundbuchabfrage. Abgefragt wird aus einem Formular, das die Eingaben an ein CGI schickt und den Auszug als Ergebnis zurücksendet. Eben dieses Ergebnis steht dann im frame, auf den ich leider nicht zugreifen kann. Dieser Vorgang ist vom Bundesministerium fix vorgegeben. Den Aufruf des CGI kann ich aber simmulieren, da ich weiß, welche Eingaben das CGI erwartet. Ich muß nun dieses Ergebnis des CGI Aufrufes irgendwie in die Finger bekommen, damit ich es abspeichern kann.
Frage: in Javascript:
var pointer = functionsname ohne Klammern;
Ich habe gelesen, daß in diesem Fall der Variablen ein Pointer mit der Speicheradresse der Funktion zugeordnet wird. In meinem Fall kann ich auf den frame[1] nicht zugreifen, weil er eine andere URL hat. Die Verweigerung kommt aber vom Browser, der Inhalt wird ja schon im frame angezeigt. Weißt Du, wie ich diesen Inhalt direkt aus dem Speicher lesen kann? Oder kennst Du eine andere Lösung, wie ich an den Inhalt komme?
Hi Cheatah
var text = parent.frames[1].document.all.tags("html")[0].outerHTML;
ordnet der Variablel text den ganzen html und Text-Inhalt des frame[1] zu. Das ist in meinem Fall ein Grundbuchsauszug, den ich abspeichern will (in JScript).Die Zuordnung funktioniert nur im MSIE 5.0, was in diesem Fall von mir sogar gewünscht ist, weil ich sowieso in der gleichen Seite XML verwende. Ich schreibe keine Seite fürs WWW, sondern ein Programm, das sammt dem MSIE 5.0 bei den Kunden installiert wird.
"var text = 4711;" Frage: Bist Du aus Innsbruck? 4711...
Der Inhalt der Variablen text ändert sich verständlicherweise bei jeder Grundbuchabfrage. Abgefragt wird aus einem Formular, das die Eingaben an ein CGI schickt und den Auszug als Ergebnis zurücksendet. Eben dieses Ergebnis steht dann im frame, auf den ich leider nicht zugreifen kann. Dieser Vorgang ist vom Bundesministerium fix vorgegeben. Den Aufruf des CGI kann ich aber simmulieren, da ich weiß, welche Eingaben das CGI erwartet. Ich muß nun dieses Ergebnis des CGI Aufrufes irgendwie in die Finger bekommen, damit ich es abspeichern kann.
Frage: in Javascript:
var pointer = functionsname ohne Klammern;
Ich habe gelesen, daß in diesem Fall der Variablen ein Pointer mit der Speicheradresse der Funktion zugeordnet wird. In meinem Fall kann ich auf den frame[1] nicht zugreifen, weil er eine andere URL hat. Die Verweigerung kommt aber vom Browser, der Inhalt wird ja schon im frame angezeigt. Weißt Du, wie ich diesen Inhalt direkt aus dem Speicher lesen kann? Oder kennst Du eine andere Lösung, wie ich an den Inhalt komme?
Liebe Grüße
Clemens.
PS.: Ich habe schon versucht, die URL der Frameseite zuerst auf die URL des Abfrageframes zu ändern und dann sofort auszulesen. Bei lokalen Seiten funktioniert das auch: Also die URL ändert sich zwar aber ich lese den Inhalt des frames aus, bevor er sich ändert. Bei dem Frame mit dem Inhalt des CGI habe ich trotz gleicher URL keinen Zugriff. Vor dem Aufruf von speichern() ist in frame[1] die jeweilige Grundbuchseite.
function speichern()
{
parent.frames[1].location.href="lokale_Seite.htm";
var text = parent.frames[1].document.all.tags("html")[0].outerHTML;
var fso = new ActiveXObject("Scripting.FileSystemObject");
var a = fso.CreateTextFile("c:\testdatei.txt", true);
a.Write(text);
a.Close();
}
</SCRIPT>
Hi,
"var text = 4711;" Frage: Bist Du aus Innsbruck? 4711...
nö, statt 4711 hätte ich auch 0815 schreiben können ;-)
[...] Dieser Vorgang ist vom Bundesministerium fix vorgegeben. [...]
Ich kann zwar immer noch nicht behaupten, daß ich das Problem in seiner Gesamtheit verstehe, aber allmählich festigt sich das Bild. Sehe ich das richtig, daß Du im Frame, den Du auslesen willst, eine Seite von einem _Fremdanbieter_ stehen hast? In dem Fall ist der Domainname mit Sicherheit ein anderer als beim fragenden Dokument, ergo wird der Zugriff verweigert. Du könntest es mit privilegierten Scripts versuchen (s. weiter oben, "(JAVASCRIPT) Zugriff verweigert"), das bedeutet aber jedes Mal eine Sicherheitsabfrage beim Benutzer (die abgelehnt werden kann).
Vielleicht wäre eine Lösung mit DHTML aber besser. Ich kenne mich mit dem Gebiet leider auch nicht gut genug aus, aber Du könntest es mit einem IFrame oder so ähnlich versuchen (bitte lies das passende SelfHTML-Kapitel, ich kenne mich damit wirklich nicht aus), dort die Seite einladen und darauf zugreifen. Vielleicht geht das.
Ansonsten sehe ich nur noch die Möglichkeit mit eigenem CGI. Unter Perl kann man mit dem Modul LWP::Simple sehr einfach (simpel eben *g*) eine fremde URL einladen, beliebig bearbeiten, aufbereiten und wieder an den Browser ausgeben.
Cheatah