Ситуацию может помочь разрешить следующий скрипт:
1 var url = document.URL.split( "/" );
2 var base = "" ;
3 for ( var i = 0; i < url.length-2; i++)
4
5 base += url[i]+ "/" ;
6 document.write( "<base href=\"" + base + "\" />" );
Для каждого уровня вложенности необходимо изменить всего лишь одну цифру.
Если страниц много, предыдущее можно вынести в отдельный файл, а где надо в head'е писать:
проблемы:
- не работает при локальном просмотре страниц (не через веб сервер)
- для старых версий IE нужно делить document.URL.split("\\"), т.е. необходимо дорабатывать скрипт
- Opera не понимает base в JavaScript'ах
Можно попробовать решить ситуацию элегантнее:
1 document.write( "<base href='" +location.protocol+ "//" +location.host+ "' />" );
Таким образом, в любую страницу мы можем вставить строчку JavaScript
кода, которая превратит все относительные ссылки в абсолютные.
полезная информация
Свойство location объекта window возвращает указатель на объект
location, содержащий информацию об URI документа, открытого в окне.
В общем виде URI имеет вид:
протокол://хост:порт/путь#закладка?запрос
Объект location содержит названные фрагменты URI как свойства, доступные для чтения и записи:
Свойство |
Описание |
hash |
Закладка, т.е. часть URI, следующая за символом "#" (включая его). |
host |
Если port не равно null, то эта строка имеет вид hostname:port,
в противном случае совпадает с hostname. |
hostname |
Имя хоста и домена или IP-адрес. |
href |
Полный URI документа. |
pathname |
Имя файла или пути. |
port |
Номер порта, указанный в URI документа. |
protocol |
Протокол, указанный в URI документа. |
search |
Запрос, т.е. часть URI, следующая за символом "?" (включая его). |
Кроме того, данный объект имеет два метода:
Метод |
Описание |
reload(flag?) |
Перезагружает текущий документ. Аргумент указывает способ перезагрузки: true —
перезагрузка с сервера, false — перезагрузка из кэш-памяти. Если аргумент опущен,
то он принимается равным false. |
replace(URI) |
Заменяет текущий документ на документ с заданным URI. При этом текущий документ удаляется из истории просмотра. |
|