IE7 игнорирует селектор атрибутов CSS только на страницах с рабочего сервера - PullRequest
20 голосов
/ 18 января 2012

На моем сайте IE7, похоже, игнорирует некоторые селекторы атрибутов CSS.Странно то, что это происходит только тогда, когда страница поступает с рабочего сервера.Если у меня есть точно такой же код на моем персональном сервере или сохранен на жестком диске, он работает нормально.Вот пример, который вызывает проблему:

<!DOCTYPE HTML>
<html><head>
<title>IE display test</title>
<style type="text/css">
[type=button] {
  display: block;
}
</style>
</head>
<body>
<input type="button" value="Button 1"/>
<input type="button" value="Button 2"/>
<input type="button" value="Button 3"/>
</body></html>

Поскольку отображение на кнопках установлено на «блокирование», они должны располагаться вертикально.Но только когда страницы обслуживаются с моего рабочего сервера , они располагаются горизонтально.Когда я использую панель инструментов разработчика для проверки стиля, я не вижу свойства «display», как обычно.Единственное, о чем я могу подумать, это может вызвать URL страницы или заголовки ответа, поступающие с сервера.Я могу, возможно, понять это, экспериментируя, но это было бы неудобно и отнимает много времени, поэтому, прежде чем я это сделаю, я хотел бы спросить: Почему это происходит и что с этим можно сделать?

РЕДАКТИРОВАТЬ: Я придумал Скрипка .На этом сайте все выглядит хорошо.

РЕДАКТИРОВАТЬ 2: Вот заголовки ответа, поступающие с рабочего сервера:

HTTP / 1.1 200 OK
Сервер: Apache-Coyote / 1.1
Тип содержимого: text / html; charset = utf-8
Язык содержимого: en-US
Длина содержимого: 291
Дата: среда, 18 января2012 21:32:48 GMT

EDIT 3: Вот заголовки ответа от моего личного сервера:

HTTP / 1.1 200 OK
Дата: среда, 18 января 2012 21:37:30 GMT
Сервер: Apache
Варьируется: Accept-Encoding
Content-Encoding: gzip
Content-Length: 176
Keep-Alive: timeout = 2, max = 100
Соединение: Keep-Alive
Content-Type: text / html; charset = utf-8

Производственный сервер не применяет сжатие gzipпотому что он делает это только для файлов выше определенного размера.Если я добавлю кое-что, чтобы сделать файл достаточно большим, он использует gzip, и я все еще вижу проблему в IE7, так что, похоже, это не имеет ничего общего с gzip.

Я попытался настроить свой персональный сервер дляотправьте заголовок «Content-Language», такой как рабочий сервер, и это не вызвало проблемы.

Я не знаю, имеет ли какое-либо другое отношение к этому какое-либо отношение к другим заголовкам.Я могу попробовать их протестировать, но это будет довольно сложно, поэтому это может занять некоторое время.

РЕДАКТИРОВАТЬ 4: Я не замечаю этой проблемы в IE8, даже если я включаю совместимостьРежим.Я тестирую это на Windows XP, на случай, если это имеет значение.

РЕДАКТИРОВАТЬ 5: Я поместил кодировку в заголовок Content-Type со своего личного сервера.Это не вызвало проблемы.

РЕДАКТИРОВАТЬ 6: Вот несколько снимков экрана: Подано с рабочего сервера: IE7 test on production server

Подано с моего личного сервера: IE7 test on personal server

Загружен прямо с моего жесткого диска: IE7 test directly from my hard drive

РЕДАКТИРОВАТЬ 7: Я наконец понял, что вызывает это!Я попытался ввести javascript:alert(document.compatMode) в адресную строку.На личных и прямых страницах показывалось CSS1Compat, а на рабочей странице показывалось BackCompat. Похоже, что браузер находится в режиме причуд только тогда, когда он рендерит страницу с рабочего сервера. Пока что я понятия не имею, почему это происходит или что с этим делать.

РЕДАКТИРОВАТЬ 8: Я пропустил деталь: Скриншот фактически взят из моей среды разработки, которая имитирует рабочий сервер, но работает на моем собственном компьютере.Это сделало бы ответ BoltClock правдоподобным, за исключением того факта, что та же проблема обнаруживается на нашем фактическом рабочем сервере, который находится на IP-адресе, соответствующем 173. . . *.Почему я вижу проблему на этом сервере?Это также частный IP-адрес?Может быть полезно знать, что фактический рабочий сервер использует https.

РЕДАКТИРОВАТЬ 9: После истечения срока действия вознаграждения проблема перестала отображаться на рабочем сервере, но она все еще отображается в моей среде разработчика (10.1.10.34). Понятия не имею почему. Я думаю, что я буду винить в этом космические лучи, если я не смогу выдвинуть еще одно доказательство.

Ответы [ 7 ]

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

Как обсуждалось в комментариях, согласно этому ответу от тридцати и этому ответу scunliffe , вполне вероятно, что это влияние функции безопасности в Internet Explorer.Ваш рабочий сервер находится в вашей интрасети и доступ к нему осуществляется через частный IPv4-адрес класса A (10.*.*.*), который, как я подозреваю, в основном заставляет IE7 отображать страницы в режиме причуд (, а IE8 и новее - отображать страницы вПросмотр совместимости ).

Все это всего лишь предположение, но, боюсь, я не смог воспроизвести вашу проблему ни в одном браузере IE ни в одной системе, по крайней мере, в вашей.персональный сервер или с моими собственными файлами.Если ваш рабочий сервер открыт для общего доступа, а не только с технической точки зрения, возможно, вы могли бы предоставить ссылку на него, чтобы мы могли продолжить отладку, поскольку проблема явно локализована на только на вашем производственном сервере .

2 голосов
/ 27 января 2012

Помните, что определенные условия могут заставить Internet Explorer отображать страницы в режиме совместимости документов, отличном от того, который указан на веб-странице.К ним относятся, помимо прочего, следующие ситуации:

  • Для страницы включено представление совместимости.

  • Страница загружена вЗона интрасети и Internet Explorer настроены на использование представления совместимости для страниц, загруженных из зоны интрасети.

  • Internet Explorer настроен для отображения всех веб-сайтов в представлении совместимости.

  • Internet Explorer настроен на использование списка просмотра совместимости, который указывает набор веб-сайтов, которые всегда отображаются в представлении совместимости.

  • Инструменты разработчика используются для отмены настроек, указанных на веб-странице.

  • На веб-странице обнаружена ошибка макета страницы, и Internet Explorer настроен на автоматическое восстановление после таких ошибок путем повторного открытия страницы в представлении совместимости.

Источник: http://msdn.microsoft.com/en-us/library/cc288325%28VS.85%29.aspx

Исходя из этого, мы можем получить ваш сайт в локальной интрасети, т.е. 7 не может отключить этотпри рендеринге, как в ie8, вы можете остановить рендеринг сайтов локальной интрасети в режиме Compat.

10.xxx сервер производства IP-адресов

file: // по существу локальный хост

http:// через ваш локальный сервер

ОБНОВЛЕНИЕ:

Хорошо, извинения IE имеет множество проблем с работой в интрасети, IE8 + - это проблема, описанная выше, поскольку вы упоминали, что IE7 не используетРежим Compat имеет свои причуды и стандарт.Зная Microsoft, хотя, возможно, они испортили ее в одном из обновлений патча ie7, но я ненавижу предположения, поэтому, если кто-то знает, пожалуйста, дайте мне знать.

Чтобы решить проблему, боюсь, я не могу дать вам программное обеспечениерешение уровня или аппаратное изменение.Если это всегда будет сайт интрасети, то я рекомендую обновить сетевые браузеры до минимума ie8.

У меня действительно есть исправление html, css (я знаю, что это не то, что вам нужно):

<!DOCTYPE HTML> 
<html>
<head> 
    <title>IE display test</title> 

    <style type="text/css"> 
        #buttons { 

        } 

        #button {
            display:block;
        }
    </style> 
</head> 
<body> 
    <div id="buttons">
        <input id="button" type="button" value="Button 1"/> 
        <input id="button" type="button" value="Button 2"/> 
        <input id="button" type="button" value="Button 3"/> 
    </div>
</body>
</html> 

Кажется, не нравится [type="buttons"] с использованием display:block;.

2 голосов
/ 21 января 2012

Я только что поигрался с кодом на вашем личном сервере (eliasz.net), файл, передаваемый по протоколу file: // и обслуживаемый на локальном сервере.

Ваш персональный сервер и при визуализациичерез протокол file: // оба отображаются правильно, так как они отображаются в режиме 'edge' (последний, а не в режиме совместимости).Однако на рабочем сервере и на сервере разработки они отображаются в режиме совместимости.Как сказал BoltClock, интранет делает это по умолчанию.Очевидно, что это применимо к вашему серверу разработки (для локального IP-адреса, например 10.1.10.34).

Я думаю, что производственный сервер также находится в вашей локальной сети, хотя он имеет публичный статический IP-адрес.Другими словами, когда вы находитесь в локальной сети, рабочий сервер обслуживается через локальную сеть, а не через Интернет.Следовательно, IE7 по-прежнему видит его как интранет-сайт.Используйте nslookup, чтобы проверить, как IE7 разрешает доменное имя.

Чтобы обойти проблему, вы можете добавить это в свой заголовок:

<meta http-equiv="X-UA-Compatible" content="IE=9" >

и затем отключить настройку вВаш IE, который заставляет его отображать сайты интрасети в режиме совместимости.

1 голос
/ 10 марта 2012

Я только что столкнулся с этим как с IE8, так и с IE9, и я нашел решение!

Теперь это может не совсем соответствовать IE7, но оно должно указывать вам правильное направление.

  • Просмотрите меню для элемента, называемого «Представление совместимости».
  • Нажмите его, и откроется диалоговое окно, в котором можно добавить веб-сайты, которые будут отображаться в «Представлении совместимости».
  • Посмотрите под списком флажок «Отображать сайты интрасети в представлении совместимости»
  • Снимите этот флажок.

Похоже, что Microsoft рассматривает хост-часть «интрасети», когдаэто:

  • , подключенный к тому же домену,
  • , идентифицированный по неквалифицированному имени хоста (например, «сервер» против «server.example.com») или
  • идентифицируется частным IP-адресом (10.xxx, 172.16-31.xx, 192.168.xx)

Также выглядит, что ничто не считается "интранетом", если клиентская система не присоединена кдомен.

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

Я вижу, что одна страница - .html, а другая - .php. Вполне возможно, что ваша страница php имеет некоторый символ (возможно, скрытый) перед типом документа. Это может повлиять на то, как IE принимает HTML и CSS.

0 голосов
/ 27 января 2012

Я не думаю, что ответ заключается в том, с какого сервера он отключился, но больше в случае добавления двойных кавычек вокруг значения в селекторе CSS.

Попробуйте:

0 голосов
/ 21 января 2012

У меня такое ощущение, что это как-то связано с сервером (основываясь на apache / coyote, я полагаю, вы используете tomcat?) И что-то связанное с пробелами, или BOF, или неправильная настройка utf-8 Вы слышали о проблемах, когда заголовок утверждает, что это utf-8, но это не так). Если у вас есть пробелы перед объявлением html, это также может привести к переходу в режим причуд. Хотя я могу ошибаться, у меня такое ощущение, что ваша проблема похожа на эту Почему ie7 всегда в режиме Quirks?

...