Вопрос:
IE и Firefox / Safari, похоже, по-разному работают с запросами типа BASE HREF и Javascript window.location. Во-первых, это точное описание проблемы? В чем дело? Какое кросс-браузерное решение является лучшим в этой ситуации?
Контекст:
У меня есть небольшой сайт-файл с плоскими файлами PHP (на самом деле это прототип тестирования юзабилити).
Я динамически генерирую значение HREF тега BASE в PHP, т. Е. Если он работает на сервере нашей компании, он:
$basehref = 'http://www.example.com/alpha/bravo/UsabilityTest/';
и на моей локальной машине разработчика это:
$basehref = 'http://ellen.local/delta/echo/foxtrot/UsabilityTest/';
Для одной из задач я собираю некоторый пользовательский ввод, выполняю некоторые преобразования в нем в Javascript и отправляю на сервер, используя такой код:
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;
}
Файл javascript (содержащий функцию allDone () ) и сценарий обработки PHP ( ProcessUserInput.php ) находятся в подкаталоге UsabilityTest. Другими словами, их фактический URL-адрес
http://www.example.com/alpha/bravo/UsabilityTest/foxtrot/ProcessUserInput.php
ака
$basehref . '/foxtrot/ProcessUserInput.php'
Проблема
JavaScript IE в основном игнорирует BASE HREF. Javascript и процессор PHP находятся в одном каталоге, поэтому вызов ProcessUserInput.php работает нормально. Ввод обрабатывается и все работает нормально.
Но когда я тестирую на Firefox, JavaScript действительно использует BASE HREF, потому что выходные данные скрипта отправляются на
$basehref . '/ProcessUserInput.php'
Это ломается, потому что ProcessUserInput.php находится в подкаталоге basehref. Однако, если я добавлю имя подкаталога в javascript, оно больше не будет работать в IE.
Решения
Я могу придумать несколько способов решить эту проблему:
- В Javascript прочитайте свойство HREF тега BASE и вручную добавьте
var URI
в javascript, вызвав полностью разрешенный абсолютный URL
- Обработайте файл .js с помощью PHP и вставьте переменную
$basehref
в скрипт
- Перемещение файлов вокруг
- Что-то еще?
Я уверен, что должны быть и другие способы решить эту проблему. Как лучше всего работать с BASE HREF в JavaScript, когда IE и Firefox по-разному применяют его в JavaScript?