HTML <base>TAG и путь к локальной папке с Internet Explorer - PullRequest
11 голосов
/ 13 октября 2010

Я пытаюсь использовать TAG, чтобы указать исходную папку, содержащую файлы мультимедиа для моих HTML-страниц, расположенных в отдельной папке.

У меня следующая структура папок:

A
|- HTML_PAGES        (contains html files)
|- MEDIA_FOLDER      (contains the media used by this html pages)

Я пытаюсь указать html-файлы с носителем, используемым html-страницами, поэтому в каждом html-файле у меня есть что-то вроде этого:1008 *

<base href="../MEDIA_FOLDER"/>

И проблема в том, что он работает для некоторых браузеров (Opera, Chrome), но не работает для Internet Explorer и Firefox.Как заставить его работать с IE и Firefox?

Ответы [ 8 ]

31 голосов
/ 14 ноября 2012

Это определенно очень раздражающая ошибка в IE, но я только что нашел обходной путь.

Нужно понять, что IE разрешает относительный путь, а затем быстро его игнорирует.Вы можете даже увидеть полностью разрешенный URL-адрес, проверив значение свойства href базового тега позже, используя JavaScript.Таким образом, этот (довольно глупый) фрагмент кода сбрасывает атрибут href тега <base> в очень полный URL, который IE уже разрешил, в результате чего он больше не игнорируется.

Добавьте следующий HTML-код вв верхней части страницы, сразу после тега и до того, как вы фактически используете какие-либо URL:

<!--[if IE]><script type="text/javascript">
    // Fix for IE ignoring relative base tags.
    (function() {
        var baseTag = document.getElementsByTagName('base')[0];
        baseTag.href = baseTag.href;
    })();
</script><![endif]-->

(необходимы условные комментарии, поскольку этот код может разбить тег <base> в Safari / Chrome, идругим браузерам это явно не нужно.)

Такая глупая ошибка.

8 голосов
/ 23 января 2012

Похоже, есть две отдельные проблемы с IE8 и IE9.

http://social.msdn.microsoft.com/Forums/en-US/iewebdevelopment/thread/c51bb8b9-40ab-437b-a125-88b660f3e1ca/

http://social.msdn.microsoft.com/Forums/en-US/iewebdevelopment/thread/e5cfdf07-494c-4703-aa4a-34a1a548de05/

Обходной путь, который, кажется, работает в IE8 и IE9, включает http: // в базовый href. У меня нет проблем с Firefox (v9)

2 голосов
/ 13 октября 2010
<base href="../MEDIA_FOLDER"/>

Не имеет косой черты, поэтому относится к файлу с именем MEDIA_FOLDER, а не к папке. Часто вы не замечаете разницу, потому что веб-серверы перенаправляют попытку извлечь folder на правильный адрес folder/, который затем обычно возвращает документ по умолчанию (например, folder/index.html). Но для относительного разрешения URL это имеет значение.

target относительно /folder это не /folder/target, это просто /target. Чтобы сделать это /folder/target, вы должны сообщить браузеру, что базовый URL является папкой, добавив косую черту:

<base href="../MEDIA_FOLDER/"/>

Здесь нет причин для другого поведения браузера. Однако вы можете найти другое поведение браузера, если вы случайно использовали обратную косую черту в стиле файловой системы \ вместо /, так что проверьте это.

1 голос
/ 13 октября 2010

Используйте абсолютный URL:

<base href="http://yourdomain.com/MEDIA_FOLDER"/>
0 голосов
/ 15 февраля 2018

Ответ Ричарда приблизил меня к рабочему решению, вот что я в итоге адаптировал.

<!--[if IE]><script type="text/javascript">
    // Fix for IE ignoring relative base tags.
    (function() {
        var baseTag = document.getElementsByTagName('base')[0];
        baseTag.href = window.location.protocol + '//' + window.location.host + baseTag.href;
    })();
</script><![endif]-->
0 голосов
/ 22 августа 2012

Это известная проблема, и это связано с тем, что IE требует закрытия тега, но не Firefox, другим браузерам просто все равно.Вот что работает для меня:

<base href="{BASE_PATH}"><!--[if IE]></base><![endif]-->

Не стесняйтесь подгонять по своему желанию и, конечно, замените {BASE_PATH} вашим реальным путем, я обычно использую абсолютный путь, но я видел эту работудля относительного тоже

РЕДАКТИРОВАТЬ: И обратите внимание, что ваш путь должен заканчиваться косой чертой

0 голосов
/ 13 октября 2010

Ваш элемент base находится внутри элемента body?Это может вызвать проблему.(Проверьте Firebug, он может закончиться в body, даже если ваш код выглядит хорошо на первый взгляд.)

0 голосов
/ 13 октября 2010

Я не уверен, как BASE работает с относительными URL-адресами каталогов, попробуйте дать ему корневой относительный URL-адрес, например

<base href="/MEDIA_FOLDER"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...