Вопрос:БАЗА HREF, JavaScript и Internet Explorer против Firefox
IE и Firefox/Safari, кажется, дело по-разному с базовыми HREF и запросами типа window.location Javascript. Во-первых, это точное описание проблемы? Что происходит? И какое лучшее кросс-браузерное решение для решения этой ситуации?
Контекст:
У меня есть небольшой PHP плоский файл sitelet (это на самом деле тестирование прототипа юзабилити).
Я динамически генерировать значение HREF базового тега в 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-скрипт обработки (ProcessUserInput.php) живут в подкаталоге UsabilityTest. Другими словами, их фактический URL является
http://www.example.com/alpha/bravo/UsabilityTest/фокстрот/ProcessUserInput.php ака
$basehref . '/foxtrot/ProcessUserInput.php'
Проблема
JavaScript в IE в основном, кажется, игнорируют БАЗЫ HREF. Javascript и процессор PHP живут в одном каталоге, поэтому вызов ProcessUserInput.php работает отлично. Вход обрабатывается, и все работает нормально.
Но когда я тест на Firefox, то JavaScript делает по всей видимости, использовать базу HREF, потому что выход скрипта отправляется в
$basehref . '/ProcessUserInput.php'
Это ломается, потому что ProcessUserInput.php находится в подкаталоге из basehref. Однако, если я добавлю имя подкаталога в javascript, он больше не работает в IE.
Решения?
Я могу придумать несколько способов решить эту:
- В Javascript, читать HREF свойство базового тега и вручную вставляться в
var URI
в JavaScript, вызов полностью разрешенную абсолютный URL - Обработать .js файл с PHP и вставить переменную
$basehref
в скрипт - Переместить файлы около
- Что-то еще?
Я уверен, что должны быть и другие способы решить эту проблему. Каков наилучший способ справиться с BASE HREF в JavaScript, когда IE и Firefox применяют его по-разному в JavaScript?
Нет, это не решает проблему базового href в IE (начиная с версии 8). У меня появилась улыбка на лице, когда я увидел, насколько просто это можно решить, но это продолжалось всего минуту. –
Как упоминалось @Halil Özgür, это не должен быть принятый ответ. – fritzmg