Pytanie:BASE HREF, javascript i Internet Explorer vs Firefox
IE i Firefox/Safari wydają się radzić sobie inaczej z base href i żądania typu window.location Javascript. Po pierwsze, czy jest to dokładny opis problemu? Co się dzieje? A jakie jest najlepsze rozwiązanie dla różnych przeglądarek, które poradzi sobie z tą sytuacją?
Kontekst:
Mam mały sitelet PHP płaskim pliku (to właściwie prototyp badania usability).
I dynamicznego generowania wartość HREF tagu bazowej w PHP, czyli jeśli jest uruchomiony na serwerze naszej firmy, to:
$basehref = 'http://www.example.com/alpha/bravo/UsabilityTest/';
i na moim komputerze lokalnym dev, to:
$basehref = 'http://ellen.local/delta/echo/foxtrot/UsabilityTest/';
Dla jednym z zadań, zbieram trochę danych wejściowych od użytkownika, wykonuję na nim transformacje w JavaScript i wysyłam na serwer za pomocą kodu takiego:
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;
}
Zarówno plik javascript (zawierający funkcję allDone()), jak i przetwarzający skrypt PHP (ProcessUserInput.php) znajdują się w podkatalogu UsabilityTest. Innymi słowy, ich rzeczywisty adres URL jest
http://www.example.com/alpha/bravo/UsabilityTest/foxtrot/ProcessUserInput.php aka
$basehref . '/foxtrot/ProcessUserInput.php'
Problem
JavaScript IE wydaje się w zasadzie ignorować href BASE. Javascript i procesor PHP działają w tym samym katalogu, więc wywołanie ProcessUserInput.php działa dobrze. Dane wejściowe są przetwarzane i wszystko działa poprawnie.
Ale kiedy testować na Firefox, kod JavaScript robi pojawiają używać href BASE, ponieważ wyjście skryptu zostanie wysłana do
$basehref . '/ProcessUserInput.php'
psuje to, bo ProcessUserInput.php jest w podkatalogu z basehref. Jednak jeśli dodaję nazwę podkatalogu do javascript, nie będzie już działać w IE.
Rozwiązania?
mogę myśleć kilka sposobów, aby rozwiązać ten problem:
- W JavaScript odczytać właściwość HREF znacznika BASE i ręcznie dołączana do
var URI
w javascript wywołaniem pełni rozwiązane bezwzględny adres URL - Przetwórz .js plik z PHP i wstaw zmienną
$basehref
do skryptu - Przenoszenie plików wokół
- Coś jeszcze?
Jestem pewien, że muszą istnieć inne sposoby rozwiązania tego problemu. Jaki jest najlepszy sposób radzenia sobie z BASE HREF w JavaScript, gdy IE i Firefox stosują go inaczej w JavaScript?
Nie, to nie rozwiąże problemu baza href w IE (w wersji 8). Po prostu dostałem uśmiech na mojej twarzy, gdy zobaczyłem, jak łatwo można to rozwiązać, ale trwało to tylko minutę. –
Jak wspomniano w @Halil Özgür, nie powinno to być zaakceptowaną odpowiedzią. – fritzmg