Frage:
IE und Firefox/Safari scheinen mit Anfragen vom Typ BASE HREF und Javascript window.location unterschiedlich umzugehen. Erstens, ist dies eine genaue Beschreibung des Problems? Was ist da los? Und was ist die beste browserübergreifende Lösung, um mit dieser Situation umzugehen?
Kontext:
Ich habe eine kleine PHP-Flatfile-Sitelet (es ist eigentlich ein Usability-Test-Prototyp).
Ich generiere den HREF-Wert des BASE-Tags dynamisch in PHP, d.h. wenn es auf dem Server unserer Firma läuft, ist es:
$basehref = 'http://www.example.com/alpha/bravo/UsabilityTest/';
und auf meinem lokalen Entwicklungsrechner ist es:
$basehref = 'http://ellen.local/delta/echo/foxtrot/UsabilityTest/';
Für eine der Aufgaben sammle ich einige Benutzereingaben, führe einige Transformationen in Javascript durch und sende sie an den Server, indem ich Code wie diesen verwende:
function allDone() {
// elided code for simplicity of stackoverflow question
var URI = "ProcessUserInput.php?";
URI = URI + "alphakeys=" + encodeURI( keys.join(",") );
URI = URI + "&sortedvalues=" + encodeURI( values.join(",") );
window.location = URI;
}
Sowohl die Javascript-Datei (mit der Funktion allDone() ) und das verarbeitende PHP-Skript ( ProcessUserInput.php ) befinden sich in einem Unterverzeichnis von UsabilityTest. Mit anderen Worten, ihre tatsächliche URL lautet
http://www.example.com/alpha/bravo/UsabilityTest/ foxtrot/ProcessUserInput.php alias
$basehref . '/foxtrot/ProcessUserInput.php'
Das Problem
Das JavaScript des IE scheint den BASE HREF grundsätzlich zu ignorieren. Das Javascript und der PHP-Prozessor befinden sich im selben Verzeichnis, so dass der Aufruf von ProcessUserInput.php funktioniert gut. Die Eingabe wird verarbeitet und alles funktioniert einwandfrei.
Aber wenn ich mit Firefox teste, wird das JavaScript tut scheinen den BASE HREF zu verwenden, da die Ausgabe des Skripts an
$basehref . '/ProcessUserInput.php'
Dies bricht, weil ProcessUserInput.php befindet sich in einem Unterverzeichnis von basehref. Wenn ich jedoch den Namen des Unterverzeichnisses zum Javascript hinzufüge, funktioniert es im IE nicht mehr.
Lösungen?
Ich kann mir einige Möglichkeiten vorstellen, dieses Problem zu lösen:
- Lesen Sie in Javascript die HREF-Eigenschaft des BASE-Tags und fügen Sie sie manuell vor
var URI
in dem Javascript, das eine vollständig aufgelöste absolute URL aufruft - Verarbeiten Sie die .js Datei mit PHP und fügen Sie die
$basehref
Variable in das Skript einfügen - Verschieben Sie die Dateien
- Etwas anderes?
Ich bin sicher, dass es auch andere Möglichkeiten gibt, dieses Problem zu lösen. Was ist der beste Weg, um mit BASE HREF in JavaScript umzugehen, wenn IE und Firefox es unterschiedlich in JavaScript anwenden?