>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Firefox http://forum.mozilla-russia.org/viewforum.php?id=4 >Абсолютные пути в HTML некорректно обрабатываются в Firefox http://forum.mozilla-russia.org/viewtopic.php?id=9753 |
iddqt > 19-04-2006 07:03:32 |
Обкатывается сайт, запускаю index.html локально с винта. |
Azathoth > 19-04-2006 07:41:39 |
iddqt, кажется есть тег <BASE> А еще лучше поставить какой-нибудь легкий web-сервер... |
petrovich > 19-04-2006 07:53:42 |
img src="img/surf.gif" |
iddqt > 19-04-2006 07:54:16 |
Тэг <BASE> оказал частичное влияние: только на ссылки на странице. Ресурсы же, графика в т.ч. так и остались недоступны. |
Azathoth > 19-04-2006 07:56:40 |
Кстати, а чем абсолютные пути лучше относительных? |
iddqt > 19-04-2006 08:13:46 |
Athathoth пишет
Согласен, что ничем не лучше, вопрос не в том. Просто столкнулся и захотел разобраться. |
petrovich > 19-04-2006 08:18:09 |
У меня на жёстком работают оба варианта: <img src="img/surf.gif"> |
Al_H > 19-04-2006 10:28:57 |
/ - это корень, в системе он не приравнивается к букве диска. Насколько я понимаю, в Windows это должен быть Каталог, в котором диски, то есть пути могут быть вроде /D:/folder1/ или /F:/folder1/ но хорошо бы еще явно прописать протокол file:, что предполагает абсолютные пути. Однозначность возникает только на сервере, локально же лучше относительные пути. |
iddqt > 19-04-2006 11:00:38 |
petrovich пишет
<img src="img/surf.gif"> - это относительный путь. Al_H пишет
IE понимает, что это именно корень текущего диска, например "D" |
Al_H > 19-04-2006 13:24:55 |
"Понимает" тут не совсем верно. Буквы дисков - это не домены. Более того, адрес /C:/folder1/ Експлорер воспринимает точно так же как Fx, но почему-то приравнивает к нему адрес с пропущенной буквой диска. Представьте, что на сервере одинаково обрабатываются адреса /c/docfolder/umh.pdf и /docfolder/umh.pdf - чем это можно будет объяснить, кроме редиректа? Просто если смотреть на то, что делает IE, как на некую норму, то в любом случае, когда другой браузер делает что-то по-другому, это будет отклонением. Например, такая-то страница Експлорер выносит напрочь, а Fx на ней просто немножко притормаживает. Или Fx некую сверстанную по стандартам страницу выводит абсолютно правильно, и IE тоже, за исключением того, что меню проваливается под контент. И в том и в другом примере поведение Fx будет ненормальным. |
hasherfrog > 19-04-2006 14:05:00 |
Какая-то дикая путаница :-) Почитайте: http://www.ietf.org/rfc/rfc3986.txt (это как пример. сделайте, кстати, такую закладку на панель задач - просто перетащите - вы удивитесь :]) |
ViRUS > 19-04-2006 15:26:17 |
hasherfrog
Ух ё! А как? Почему? У меня же нет вэб-сервера! |
stoneflash > 19-04-2006 19:01:02 |
ViRUS |
iddqt > 20-04-2006 08:01:02 |
hasherfrog пишет
"file://localhost/C" тоже не помог... Быть может, хрен с ними, с этими путями абсолютными... |
Al_H > 20-04-2006 10:59:28 |
Очень верное решение. Если не секрет, зачем они Вам были нужны? |
hasherfrog > 21-04-2006 00:04:59 |
Al_H iddqt Выделить код Код:<HTML><HEAD><BASE href="file://localhost/c:/"> <META HTTP-EQUIV="Content-Type" content="text/html; charset=windows-1251"> <TITLE>Document Title</TITLE></HEAD><BODY> <img src="/temp/c.gif"><hr><img src="/temp/d.gif"> </BODY></HTML> Так вот Мозилла действительно резольвит абсолютные пути относительно "autority", указанной в <BASE>, а IE - относительно "autority/path". Возникает вопрос, а кто правильно? :-) Сел внимательно читать. Нашёл. Это я к чему. Не лечится. Только указывать диск в ссылке (что по условию задачи не подходит). И мой "конгениальный совет" выше [Вчера 14:05:00] не сработает. |
Al_H > 21-04-2006 00:14:05 |
Для обкатки лучше настроить Апач (что несложно), и ходить через localhost/
Вот поэтому я локальные абсолютные ссылки и не люблю. Слишком много разночтений. |
hasherfrog > 21-04-2006 00:33:43 |
Про апач - это кому как. Про "люблю" - вот, некоторым вона как приходится пыхтеть :] Но это оффтоп. Главное, мораль темы-то: Абсолютные пути в HTML корректно обрабатываются в Firefox :] |
iddqt > 21-04-2006 05:28:53 |
hasherfrog пишет
Да не мораль нужна в данном случае и не хотелось бы опять скатываться до выяснения "кто правильнее обрабатывает". Вопрос в том "как заставить Firefox отрабатывать абсолютные ссылки на ресурсы"? А вот поразмыслив глубже, я пришел в выводу, что (ИМХО, конечно) корень данной проблемы кроется именно в корне (простите за тавтологию). Точнее, что со времен ДОСа файловая система построена на том, чтобы не замечать главного корня, а каждый раздел - "СамСебеКорень". Поэтому IE в данном случае намного ПРОЩЕ! |
hasherfrog > 21-04-2006 23:40:36 |
Извините за задержку, инета не было. Как всё-таки неприятно, когда решение >> "как заставить Firefox отрабатывать абсолютные ссылки на ресурсы"? Решением будет использование Greasemonkey с соответствующим скриптом. Скрипт такой: Выделить код Код:// ==UserScript== // @name Disk Falsificator // @namespace file://localhost/ // @description Apply content of <BASE href=' '> tag to absolute links like IE does // @include file://localhost/* // @include file:///* // ==/UserScript== var string2correct = "file://localhost/"; var base; function substBase(tag, atr) { var items = document.getElementsByTagName(tag); for (var i = 0; i < items.length; i++) //ignore reletive links if (items[i].getAttribute(atr).charAt(0) == '/') //ignore correct links if (items[i][atr].indexOf(base) == -1) //replace links items[i][atr] = items[i][atr].replace(string2correct, base); } //get base value var baseTags = document.getElementsByTagName("base"); //check if base exists if (baseTags && baseTags.length) { base = baseTags[0].href; //only for pages from localhost if (base.indexOf(string2correct) != -1) { substBase('img','src'); substBase('a','href'); } } Ньюансы эксплуатации такие: Скрипт проверен на Mozilla Firefox 1.5.0.2 и Greasemonkey 0.6.4. Всё работает. Удачи. |
iddqt > 24-04-2006 09:21:12 |
hasherfrog пишет
Спасибо за наводку. Я не стал заморачиваться с Greasemonkey, а просто написал на основе предложенного кода небольшой js-файлик, который подключаю в тексте отлаживаемой страницы одной строкой. Во-первых, добавил substBase('link','href') для подгрузки стилей. Но вот проблема - не отображаются фоны с абсолютным путем {background-image: url(/img/bg.gif);}. Поэтому до кучи написал функцию для обхода и замены абсолютных путей в стилях. Вкратце: Выделить код Код:base = file://localhost/C:/'; ... string2correct = "url(/" base = "url(" + base; reStyle('backgroundImage'); reStyle('cursor'); reStyle('font'); ... function reStyle(attr) { var items = (document.styleSheets) ? document.styleSheets[0] : null; if (!items||!items.insertRule) return; items=items.cssRules; for (var i = 0; i < items.length; i++) if (eval('items[i].style.' + attr).length > 0) if (eval('items[i].style.' + attr).substring(0, string2correct.length) == string2correct) if (eval('items[i].style.' + attr).indexOf(base) == -1) eval('items[i].style.' + attr + ' = items[i].style.' + attr + '.replace(string2correct, base)'); } Спасибо! |