Отсутствие стилей/сценариев/изображений при использовании элемента BASE для локального html файла, отображаемого в IE8 в режиме стандартов IE8

У нас есть некоторые HTML-страницы (локальные, а не на веб-сервере), которые используют элемент BASE для идентификации определенного базового каталога, содержащего кучу общих таблиц стилей и изображений. Вот пример (страница хранится в каталоге c:\temp\html\test.html, каталог ресурсов c:\temp\resources):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
    <head>
        <base href="file:///c:/temp/resources/"></base>
    </head>
    <body>
        <p><img src="image.jpg" /></p>
    </body>
</html>

Это хорошо работает во всех браузерах, которые я тестировал (Firefox, Chrome, IE9) и отлично работает в IE8 в режиме Quirks. Но в IE8, работающем в режиме стандартов IE8 (по умолчанию для этой страницы - и на реальных страницах - требуемый режим), любая таблица стилей, script или ссылки на изображения сломаны - это как если бы элемент полностью игнорировался.

Я пробовал другие варианты для элемента - <base href="file:///c:/temp/resources/"> или <base href="file:///c:/temp/resources/"/>, а также всевозможные разные URL-адреса файлов, например. file:///c:/temp/resources/test.html и т.д., а также относительные hrefs для базы, но ничто, кажется, не убеждает загружать изображения/таблицы стилей/скриптов.

Я знаю, что приведенный выше пример кажется тривиальным, но в нашем реальном сценарии мы должны загружать страницы в IE8 в режиме стандартов IE8 и должны устанавливать конкретный, поэтому я действительно пытаюсь найти решение, если оно есть.

Я добавил некоторые ссылки на ошибку в ранних версиях IE8, относящихся к элементу, но они помечены как исправление довольно давно, и я тестирую это на чистой виртуальной машине Windows 7 с применением всех обновлений IE8.

Ответы

Ответ 1

Обновление статуса:   Использование: <base href="\\c:\temp\resources\" />

Здесь процесс, который я использовал для создания этого решения, чтобы IE8 использовать Base Attribute для локальных файлов.

Чтобы уточнить: Это W3C проверенное решение работает для IE7, IE8 и всех современных браузерах!


Ссылка Скриншот::
Здесь вы можете видеть, что Адресная строка IE8 не работает, как другие современные браузеры: Черты обратные, и нет протокола file:///. Однако IE8 отобразит протокол file:/// в строке состояния браузера при обновлении страницы!

enter image description here

Ссылочный снимок экрана:
Поскольку IE8 обрабатывает локальные файлы по-разному, важно понимать протокол IE8 для file:///.

Чтобы понять, какие синтаксические методы доступны, просмотр Свойства обозревателя (вкладка "Безопасность" ) для локальной интрасети предоставит нам эту информацию. На самом деле никаких изменений здесь нет, просто синтаксис:

enter image description here

На приведенном выше снимке окно Local Intranet Window подтверждает, что требуется обратная косая черта.

Также показано, что протокол file:\\ связан с синтаксисом слэша. Поскольку протокол file:/// подразумевается автоматически с помощью IE8 (ранее упоминалось: см. Строку состояния браузера и заметки, косые черты отображаются правильно!).


Определение этого протокола file: в теге Base является проблемой. Решение не использовать протокол!


Ссылка Ссылка 1: Схема URL без протокола:

Не совсем точное чтение, но раздел 4.2 RFC 3986 предоставляет для полноправных URL-адресов, которые пропускают протокол (HTTP или HTTPS) в целом. Когда протокол URL-адресов опущен, браузер использует протокол базовых документов.


Ссылка Ссылка 2: Понимание ссылки на сетевой путь Paul Irish:

* Конечно, если вы просматриваете файл локально, он попытается запросить файл с протоколом file://.


В приведенных выше ссылках объясняется, что использование // позволит любому браузеру использовать известную в настоящее время схему URL при доступе к файлам или активам. Поскольку IE8 является сменой игры, использование \\ вместо // будет работать для базового тега, поскольку все браузеры будут преобразовывать/интерпретировать это как стандартный file:/// Схема URL (подразумеваются локальные файлы), включая браузер IE7!


Полная разметка HTML | Рабочий DEMO:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>Using Base Tag with Local Files IE8 and Modern Browser DEMO</title>

  <!-- The name of this file is:  test.html  -->
  <!-- The location of this HTML file on the hard drive is:  C:\temp\html\test.html  -->

  <!-- This unusually constructed Base attribute tag uses two rules to have it work for Locally Hosted IE8 Files that are not server based. -->
  <!-- First, the "URL Scheme" is based on "Network Path Reference" which means no Protocol is used. -->
  <!-- Second, the "forward slashes" are changed to "back slashes". It the syntax IE8 actually expects. -->
  <!-- This entire method is also friendly for modern browsers showing these local files that are not server based. -->
  <base href="\\c:\temp\resources\" />

</head>
<body>

  <p>
    <!-- The location of this "image.jpg" on the hard drive is at:  C:\temp\resources\image.jpg  -->
    <img src="image.jpg" alt="image" />
  </p>

</body>
</html>

Ответ 2

К сожалению, похоже, что режим стандартов IE8 не обрабатывает файл://URI в элементе BASE.

Если вы можете запустить script внутри своих локальных страниц, я бы предложил вам использовать простой javascript для циклического перехода по всем вашим внешним элементам (SCRIPT, IMG, LINK, IFRAME, FRAME) и исправить любые схемы, меньше URI (те, которые не содержат "://" ), используя вашу желаемую базу.