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