IE9 только _sometimes_ игнорирует <base href> - PullRequest
4 голосов
/ 27 октября 2011

Мы разрабатываем сайт, который интенсивно использует <base href> (что типично для сайтов TYPO3). Сайт разработан в подкаталоге и позже будет перемещен в верхний каталог, поэтому мы не можем легко удалить <base href>.

Наш клиент сказал нам, что иногда, когда она просматривает новые страницы, она получает содержимое страницы без примененного макета. Мы отладили это: это происходит только в IE9. Глядя на журналы, мы обнаруживаем, что при возникновении ошибки IE9 пытается загрузить CSS, JS и все изображения, следовательно, из неправильного местоположения: относительно текущего URL, а не относительно BASE HREF ... Дальнейшая проверка журналов показывает нам что пользователи IE8 также пострадали, в том числе некоторые тупые веб-пауки (для нас не проблема с последними, кого это волнует?).

Мы уже знаем о спекулятивном загрузчике / парсере IE8: http://blogs.msdn.com/b/ieinternals/archive/2009/07/27/bugs-in-the-ie8-lookahead-downloader.aspx

Я уверен, что мы НЕ сталкиваемся с ошибками, описанными ТАМ: Все элементы страницы (включая первый элемент заголовка) загружены из неправильного места. Эта ошибка описывает, что затрагиваются только вторые и более поздние элементы из заголовка страницы. Мы можем доказать это, просматривая журналы доступа при возникновении проблемы.

Простая перезагрузка устраняет проблему, сравнивая исходный код страницы с ошибкой, которая произошла, и без нее не показывает никакой разницы. Это влияет только на IE, все остальные браузеры в порядке.

Тег <base href> является первым в теге <head>. Мы перепробовали все возможные решения, ничего не помогло. Кажется, это ошибка IE.

Кто-нибудь еще испытывал это и нашел работу? У нас есть несколько других сайтов, использующих <base href>, где мы не можем воспроизвести такое поведение в наших тестовых системах - поэтому, возможно, что-то вызывает или работает вокруг этой ошибки. Но я проанализировал логи этих сайтов и вижу, что некоторые посетители, использующие IE8, даже сталкиваются с этой ошибкой.

Как и просили в комментариях, вот запутанный пример моей HTML-головы:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html
     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>

<base href="http://client.site/cms/" />

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<!-- 
    This website is powered by TYPO3 - inspiring people to share!
    TYPO3 is a free open source Content Management Framework initially created by Kasper Skaarhoj and licensed under GNU/GPL.
    TYPO3 is copyright 1998-2011 of Kasper Skaarhoj. Extensions are copyright of their respective owners.
    Information and contribution at http://typo3.com/ and http://typo3.org/
-->

<meta name="generator" content="TYPO3 4.5 CMS" />

<link rel="stylesheet" type="text/css" href="typo3temp/stylesheet_fad97d0aa7.css?1312295592" media="all" />
<link rel="stylesheet" type="text/css" href="fileadmin/css/styles.css?1319535102" media="screen" title="Standardstyles" />
<link rel="stylesheet" type="text/css" href="fileadmin/js/fancybox/jquery.fancybox-1.3.4.css?1310653643" media="all" />
<link rel="stylesheet" type="text/css" href="fileadmin/js/jqtransformplugin/jqtransform.css?1312810052" media="all" />

<script src="fileadmin/js/jquery-1.6.2.min.js?1310979164" type="text/javascript"></script>
<script src="fileadmin/js/jqtransformplugin/jquery.jqtransform.js?1312460310" type="text/javascript"></script>
<script src="typo3temp/javascript_93553eae97.js?1312462864" type="text/javascript"></script>

<link href="fileadmin/css/print.css" rel="stylesheet" media="print" type="text/css" />    
  <script src="/tools/formmailer.js" type="text/javascript" charset="utf-8"></script><title>Some title for the page</title>

</head>

Ответы [ 3 ]

7 голосов
/ 28 октября 2011

Мы нашли это: Internet Explorer делает всякие забавные вещи, когда возвращаемый с сервера HTML-файл содержит спецификацию UTF-8.Мы по-прежнему считаем это ошибкой IE, но, по крайней мере, мы нашли обходной путь.

Справочная информация: при первоначальной генерации страницы включались некоторые файлы PHP, которые не включаются для последовательных запросов (поскольку большая часть сгенерированного контента кешируетсяэти файлы не нужно запускать).Некоторые из таких включенных файлов PHP содержали спецификацию UTF-8.Поскольку спецификация предшествует открытому тегу PHP, она выводится на выход PHP.

Мы выяснили это путем сравнения выходных данных в fiddler, а размеры файлов отличались на 3, 6 или 9 байтов при ошибкепроизошло.Выполнение diff для выходных данных показало заголовок спецификации, сравнение в большинстве редакторов Windows не показывало, потому что эти редакторы знают о спецификации.Так что проблема была скрыта.Спасибо IE за 2,5 дня бесполезной работы!

1 голос
/ 26 февраля 2014

Если вы когда-нибудь столкнетесь с такой проблемой снова, рассмотрите возможность удаления тега base с config.baseURL > и отображения всех ссылок с абсолютным URL:

Либо используйте config.absRefPrefix = http://www.example.org/mysubfolder/ (наиболее сохраненный вариант), либо используйте config.absRefPrefix = /.

0 голосов
/ 27 октября 2011

Я подозреваю, что вы не используете абсолютный путь в теге.IE разрешено игнорировать ваш тег, так как он не указан правильно.Смотри http://www.w3schools.com/tags/tag_base.asp

...