"Root Directory" mit JS herausfinden
Günther S
- javascript
Hallo zusammen,
ich habe schon wieder ein Problem mit Javascript.
Und zwar möchte ich via JS nach dem Durchlauf einer Funktion ein Hintergrund-Bild bei einem Element anzeigen.
Das ganze sieht in etwa so aus:
document.all.IDMeinesElements.style.background = "url(" + rootdir + "templates/images/button_background.jpg) no-repeat;";
soweit, so gut. Wenn ich anstatt "rootdir" den entsprechenden Wert meiner Testumgebung ("http://localhost/jstest/") eingebe, dann funktioniert alles prächtig. Nur möchte ich das Webspace-unabhängig machen und diese Adresse irgendwie ermitteln lassen.
Die JS-Datei liegt übrigens im Verzeichnis /templates - relative Pfade funktionieren aber dank mod_rewrite nicht (URLs werden neu geschrieben im Format http://localhost/jstest/news/25/).
Ich nehme an, mit dem client-seitigen JS wird das nicht funktionieren, da das doch nur das sieht, was man auch als normaler Benutzer sieht (oder zumindest theoretisch sehen könnte), oder?
Gibt es in diesem Fall eine Möglichkeit, eine Variable von PHP ($_SERVER['HTTP_HOST'], $_SERVER['SCRIPT_NAME']) zu übertragen?
Grüße,
Günther
Gibt es in diesem Fall eine Möglichkeit, eine Variable von PHP ($_SERVER['HTTP_HOST'], $_SERVER['SCRIPT_NAME']) zu übertragen?
Ja, einfach als JS ausgeben, in etwa so:
<script type="text/javascript">
var HTTP_HOST = "<?php echo $_SERVER['HTTP_HOST']; ?>";
</script>
Struppi.
Hallo,
Ja, einfach als JS ausgeben, in etwa so:
Danke, so habe ich es gemacht.
Gruß,
Günther
Moin!
Gibt es in diesem Fall eine Möglichkeit, eine Variable von PHP ($_SERVER['HTTP_HOST'], $_SERVER['SCRIPT_NAME']) zu übertragen?
Ja, einfach als JS ausgeben, in etwa so:
<script type="text/javascript">
var HTTP_HOST = "<?php echo $_SERVER['HTTP_HOST']; ?>";
</script>
Und was ist, wenn der HTTP_HOST von PHP nicht mit dem Host übereinstimmt, den Javascript anspricht? Weil z.B. ein Proxy dazwischensitzt, irgendein abstruses Rewriting etc.?
http://de.selfhtml.org/javascript/objekte/location.htm#host wäre deutlich besser gewesen als Tipp, wenn es denn unbedingt eine absolute Angabe mit Servername sein muß.
- Sven Rautenberg
Wenn du schon mod_rewrite hast, dann kannst du dir das doch auch zu Nutzen machen. Nimm halt ein spezielles Verzeichniss, z.B. /images01/ und wenn dann die Anfrage an den Server /images01/ beinhaltet, dann schreibe die URL entsprechend um, so dass sie ins richtige Verzeichniss auf dem Server zeigt?
Gruß Ben
Moin!
Und zwar möchte ich via JS nach dem Durchlauf einer Funktion ein Hintergrund-Bild bei einem Element anzeigen.
document.all.IDMeinesElements.style.background = "url(" + rootdir + "templates/images/button_background.jpg) no-repeat;";
Warum document.all? Dieses uralte IE-only-Gedöns sollte doch langsam mal auf den Müll fliegen.
Außerdem frage ich mich, wo das Problem liegt.
Da anzunehmen ist, dass sowohl auf dem Testserver als auch auf dem Live-Server die Verzeichnisstruktur identisch ist (wie sollen sonst die Links funktionieren), sollte es durch Angabe der passenden URL keinerlei Probleme geben.
> soweit, so gut. Wenn ich anstatt "rootdir" den entsprechenden Wert meiner Testumgebung ("http://localhost/jstest/") eingebe, dann funktioniert alles prächtig. Nur möchte ich das Webspace-unabhängig machen und diese Adresse irgendwie ermitteln lassen.
Das bedeutet also, auf dem Testserver liegt das Hintergrundbild unter
http://localhost/jstest/templates/images/button\_background.jpg
Und wo liegt sie auf dem Live-System?
> Ich nehme an, mit dem client-seitigen JS wird das nicht funktionieren, da das doch nur das sieht, was man auch als normaler Benutzer sieht (oder zumindest theoretisch sehen könnte), oder?
Was serverseitig an Rewriting passieren könnte (man weiß es ja nur, wenn man es selbst eingerichtet hat), ist irrelevant für dein Javascript!
Javascript kann nur auf URLs zugreifen. Und die müssen stimmen, egal was hinterher mit Rewriting läuft.
Finde heraus, welche URL du benötigst, um dein Hintergrundbild zu laden. Relative URLs sind dabei denkbar, auch absolute und server-absolute Angaben funktionieren - letztere sind aber, da man dort den Servernamen fest angibt, eher unpraktisch.
Aber beispielsweise mit
~~~javascript
document.getElementById(IDMeinesElements).style.background = "url(/jstest/templates/images/button_background.jpg) no-repeat;";
würde es sicherlich funktionieren - auf beiden Servern, solange die URL nach dem Servernamen gleich bleibt.
Wenn nicht, würde ich den Testserver so ändern, dass das danach der Fall ist.
Gibt es in diesem Fall eine Möglichkeit, eine Variable von PHP ($_SERVER['HTTP_HOST'], $_SERVER['SCRIPT_NAME']) zu übertragen?
PHP-interne Dateipfade interessieren dich nicht. Da hat Rewriting gewirkt, vielleicht CGI-Redirects, Alias-Einbindung, interne Datei-Symlinks etc., die alle für Javascript irrelevant sind.
Javascript hat außerdem ein wunderschönes Location-Objekt, welches außer location.href noch diverse weitere Informationen über die aktuell angezeigte Seite bereithält.
- Sven Rautenberg