Sven Rautenberg: Variablen deklarieren

Beitrag lesen

Aloha!

Stimmt nicht - gerade getestet! Man kann per GET abgeschickte
Formulare auch dann mit JS auswerten, wenn die Datei mit file://
aufgerufen wurde.

sorry, aber ich kann Deiner Argumentation auch nicht folgen.

GET ist eine HTTP-Methode - und die findet nicht dort statt, wo
JavaScript auch nur das Geringste davon mitbekommen würde ...

Aber der Erfolg gibt mir recht. :) (getestet in IE, Opera und Netscape 4)

Und das ist für mich auch ganz erklärlich. Denn was macht der Browser, wenn er ein GET-Formular abschicken will? Er nimmt den Inhalt des Formulars, codiert diese Daten ein wenig, nimmt die action-Angabe als neue URL (basierend auf der alten URL) und hängt hinter einem Fragezeichen die Formulardaten an.

Dann fordert er diese neue URL an. Und zwar wahlweise über das Protokoll http:// (sofern das Formular vom Server kommt), oder über das Protokoll file:// (wenn die Datei aus dem lokalen Dateisystem kommt).

Und in dieser Datei kann Javascript dann auf location.search zugreifen, weil Javascript auf die angezeigte URL zugreift, und nicht auf das, was irgendein Server mal gekriegt zu haben glaubt. Javascript kriegt ja garnicht mit, was der Server alles im GET-Request empfangen hat, denn der meldet es dem Browser nicht zurück. Der Javascript-Zugriff ist dadurch möglich, weil der Browser sich merkt, welchen URL-Parameter er gesendet hat.

Der Zugriff via file:// erfolgt ganz offenbar so, daß der Parameter schlicht ignoriert wird. Das gleiche passiert ja auch, wenn man HTML-Ressourcen vom Server anfordert, die mit dem Query-String nichts anfangen können. Es ist egal, ob ich eine "index.html" oder eine "index.html?param=23" anfordere - sofern das eine schlichte HTML-Datei ohne Programmlogik ist, wird das Ergebnis identisch sein.

Wers nicht glaubt, mache bitte den Test:
<html>
<head>
<title>Formtest</title>
<meta name="author" content="Sven Rautenberg">
<meta name="generator" content="Ulli Meybohms HTML EDITOR">
<link rel="stylesheet" href="screen.css" type="text/css" media="screen">
</head>
<body >
<form action="test.htm">
<input type="text" name="eintext">
</form>
<script type="text/javascript">
alert(location.search);
</script>
</body>
</html>

Diese Datei lokal speichern und aufrufen. Es kommt ein leerer Alert. Dann etwas ins Textfeld schreiben und mit Return abschicken. Der Alert zeigt den URL-Parameter.

- Sven Rautenberg