Тэг <base> и window.location='...' Баг или фича?

zer0ne

Guest
Тэг <base> и window.location='...' Баг или фича?

Столкнулся с багом (или фичей):
Допустим, есть страница http://www.some_domain.com/some_dir/some_page.php
Если в <head> этой страницы вставить <base href="http://www.some_domain.com" /> , то IE (6.0) и Firefox (1.0.1) на JS-код типа window.location='other_page.php' , реагируют именно так, как ожидается по логике вещей, т.е. открывают http://www.some_domain.com/some_dir/other_page.php , в то время как Опера (8.0) открывает http://www.some_domain.com/other_page.php т.е. отсчитывает относительную ссылку от <base>.
В других браузерах не тестировал.
Довольно неприятный баг (вряд ли фича). Нашел только один способ борьбы с этой лажей - абсолютные линки.

Может кто подскажет что-то более конструктивное?

З.Ы. PHP тут при том, что все это горе как раз посредством его и генерится.
 

crocodile2u

http://vbolshov.org.ru
Ы.З. PHP тут совершенно ни при чем.

А если делать все линки вида "/some_dir/some_page.php" - указывать путь от корня сайта?

И вообще, довольно странные инструкции ты, получается, даешь браузеру:
в теге <base> ты ему говоришь, что относительные линки нужно "считать" от http://www.some_domain.com, а в теге <a> ты указываешь относительный путь, но ожидаешь, что это он будет "считаться" относительно другой базы. По-моему, Opera в данном случае ведет себя как раз весьма предсказуемо и адекватно. Впрочем, это все так, навскидку. Надо бы обратиться к стандартам.
 

zer0ne

Guest
Вот что сбивает с толку:
смотрим MSDN:
BASE Element | BASE Object -
Specifies an explicit URL used to resolve links and references to external sources such as images and style sheets.
и тут же внизу приводится такой пример:
This example sets the base URL of the document to a reference folder. Internet Explorer uses the BASE element to resolve the link to http://msdn.microsoft.com/workshop/author/dhtml/reference/properties/href_2.asp.
PHP:
<HEAD>
<BASE HREF="http://msdn.microsoft.com/workshop/author/dhtml/reference">
</HEAD>
<BODY>
Click <A HREF="properties/href_2.asp">here</A> to learn about the href property.
</BODY>
Вот и не понятно, <base> только для картинок и css или все же для всех типов файлов. Если для всех, то выходит сам же IE и не соблюдает этот стандарт (как и Firefox).
Вобщем бред.

З.Ы. А если подставлять в относительную ссылку еще и директорию то Опера работает правильно, а эти двое - нет, т.е. лепят к локальному пути еще и директорию, которая уже и так там (в пути) присутствует.
Фу, высказал.
 

crocodile2u

http://vbolshov.org.ru
Да, странное поведение...

У меня лично нет времени сейчас все это протестить, но если все дейсвительно так обстоит, может, стоит спросить у разработчиков FF и Opera (думаю, до мелкософтовских не достучаться, да и работа над IE6 вроде прекращена.)
 
Этот баг действительно имеет место быть. Причем его наличие разнится в различных броузерах и их версиях. Чтобы всегда нормально работало нужно писать полный URL (начиная с http).
 

zer0ne

Guest
Тогда такой вопрос:
снижается ли скорость загрузки страницы, если к ней обращаться через абсолютный URL ?
 

firstVDS

Новичок
Нет не снижается. Абсолютный или относительный URL, это все вещи которые имеют место быть только на стороне клиента (в броузере). Веб серверу всегда будет посылаться абсолютный путь.
 

zer0ne

Guest
хм, вообще-то мог бы и сам догадаться, изучив заголовки :/

спасибо
 

crocodile2u

http://vbolshov.org.ru
Полукондуктор
Начинать с http вовсе необязательно. Достаточно пути от корня сервера -
/my/path/
 
Сверху