2012-07-25 11 views
7

mam ten problem, że nie może wydawać się znaleźć rozwiązanie dla ...IE7 awaryjne do IE6 trybie standardowym podczas renderowania CSS z pamięci podręcznej

Mam stronę, który renderuje grzywny z natywnym IE7 (nie emulowane jeden z IE9/IE8) przy początkowym obciążeniu, ale wraca do trybu standardowego IE6 na kolejnych żądaniach, które są podawane z pamięci podręcznej przeglądarki. IE7 wie, jak radzić sobie z wieloma klasami CSS, takimi jak "div.class1.class2", podczas gdy tryb standardowy IE6 nie - dlatego moja strona załamuje się przy każdej wizycie, ale w pierwszej.

Oto jak go odtworzyć:

  • otworzyć IE7 (prawdziwa, IE7 Emulowane Tryb z IE9/IE8 nie zadziała!)
  • iść do hhttp: // beta. upcload.com/widget/popup?garmentId=workaholicfashion-5276777 & sid =
  • na pierwszej wizycie, wszystko powinno wyglądać dobrze i dandysa (na przykład niebieski przycisk, tak jak w Chrome lub FF)
  • reload strona teraz, kilka reguł CSS się zepsuło, ponieważ przeglądarka wraca do trybu standardowego IE6 (NIE Tryb dziwności, sprawdziłem to! document.compatMode jest nadal „CSS1Compat”)
  • wyczyścić pamięć podręczną i przeładować, wszystko wygląda ładnie ponownie
  • powtarzać tak często, jak chcesz

Więc wydaje się, że gdy wszystkie pliki uzyskać lepszy od serwery Amazon, IE7 sprawia, że ​​są one w porządku, w tym reguły CSS, które zawierają wiele klas. (na przykład "div.class1.class2") Przy próbie ponownego załadowania dokładnie tej samej strony z tym samym kodem, w jakiś sposób przełącza się do trybu standardowego IE6 (nie trybu Quirks), który nie rozumie zakodowanych klas CSS i dzieli kilka projekty, na przykład przyciski. Próbowałem dodać kilka różnych nagłówków Doctype/Meta, ale one nie mają znaczenia, obecnie strona jest zgodna z XHTML i ma zgodny z X-UA nagłówek IE = edge, ale nadal nie wyświetla się poprawnie po załadowaniu z pamięci podręcznej. Jedyną różnicą w nagłówkach, jaką mogłem odczytać, był brakujący nagłówek Content-Type dla żądań niezmodyfikowanych, ale to nie powinno być problemem, prawda?

Aha, i na dodatek, kiedy otwieram tę samą stronę z IE7 na moim lokalnym serwerze programistycznym, renderuje się dobrze, nawet po ponownym wczytaniu! :/

Aktualizacja

porządku, więc byłem w końcu w stanie odtworzyć go na serwerze rozwoju. Jedyną różnicą był nagłówek "max-age", który powodował, że przeglądarka nie zapisywała niczego w pamięci podręcznej lokalnie. Kiedy zwiększyłem czas cache, IE7 zaczął buforować te pliki, co ponownie spowodowało przerwę w projektowaniu po załadowaniu ich z pamięci podręcznej. To musi być problem z plikami obsługiwanymi z pamięci podręcznej zamiast z serwera.

Aktualizacja 2

I zmniejszyła go do pliku CSS. Wygląda na to, że IE7 renderuje go w trybie IE6, gdy pochodzi z pamięci podręcznej (tj. Bez nagłówka Content-Type) iz trybem IE7, gdy zostanie załadowany z serwera. (Content-Type: text/css) Czy ktoś ma pomysł, dlaczego tak się stało? Może jakieś zniekształcone reguły CSS? Jako obejście dodałem teraz parametr losowy do arkusza stylów, aby zapobiec buforowaniu, co uniemożliwia przejście IE7 do trybu IE6, ale nawet po usunięciu wszystkich błędów i ostrzeżeń z arkusza stylów problem nadal występuje.

+0

IE jest raczej trudne do wsparcia w porównaniu do Chrome i FF, w moim doświadczeniu. Co zadeklarowałeś "DOCTYPE"? – starbeamrainbowlabs

+0

'' Tak Nie jestem nowy w tej całej zgodności z przeglądarkami, ale w pewnym sensie uderzam w ścianę z tym konkretnym problemem. :/ –

+0

ponownie swoją aktualizację2: czy sprawdziłeś arkusz stylów pod kątem błędów? Czy masz tam jakieś hacki CSS? Czy użyłeś specyficznego dla IE stylu 'filter' (ponieważ ma to niestandardową składnię)? Czy możesz usunąć problem, usuwając część lub całą zawartość pliku? – SDC

Odpowiedz

5

Niedawno doświadczyłem dokładnie przeciwnego zachowania, jednocześnie wspierając starszą aplikację IE6.

W każdym razie, używaj xhtml 1.0 strict doctype, to ważny początek!

First-off: zwykła lista kontrolna:

  • (Generated) (X) HTML, pliki/dane są wysyłane/zapisywane bez BOM, a nie pojedynczy bajt jest przed DTD?
  • Czy sprawdziłeś, jakie ustawienia są wysyłane przez serwer, który wysłał plik?
  • Czy dokumenty są typu treści "text/html" lub XML ("application/xhtml + xml" lub "application/xml") (w markup-source = metatagu i/lub wysłane przez serwer = nagłówek)?
  • Czy strona jest obsługiwana (lub komunikowana) z domeną na czarnej liście Microsoft (gdzie fallbackmode IE są niedozwolone)?
  • Czy sprawdziłeś różnice w ustawieniach zabezpieczeń IE między lan/intRAnet i wan/intERnet (skoro wymieniłeś inne zachowanie)?
  • Czy istnieje ewentualnie proxy, przez który łączysz zbyt internet (który może przepisać coś?)

Teraz mają gotowe dane i odwiedzić absolute best source on browsermode-switching jakie kiedykolwiek widziałem, w rzeczywistości każdy szanujący web-dev książka powinna obejmować to w pierwszych rozdziałach. Cała ta dobroć na jednej wyraźnej stronie, to "oświecające" co najmniej ..
Ludzie powinni wiedzieć, że są 2 części przełączania trybu przeglądarki i zrozumieć, kiedy oczekiwać, jakie zachowanie.
Na tej samej stronie znajduje się także IE mode-switching-flowchart, który daje wgląd w ekstrawagancki labirynt, który IE podąża, aby określić jego ostateczny rendering/tryb przeglądarki.

Naprawdę mam nadzieję, że to pomoże!

UPDATE:
tryb NIE NIE IE6 (standard/cokół) (w nowszych wersjach Ie). Zobacz official microsoft documentation (i updated link z tym cytatem) !! Pozwól mi nawet zacytować go:

Windows Internet Explorer 7 zaoferował nowe funkcje, które zostały zaprojektowane do pełniej wspierać standardy przemysłowe, takie jak wsparcie dla selektora uniwersalnego. Ponieważ dyrektywa obsługuje tylko dwa ustawienia (tryb dziwactwa i standardy), tryb standardów IE7 zastąpiono trybem standardowym Internet Explorer 6: .

A oto kod dla ich doctype-switch sprawdzający (źródło na tej samej stronie):

engine = null; 
if (window.navigator.appName == "Microsoft Internet Explorer") 
{ 
    // This is an IE browser. What mode is the engine in? 
    if (document.documentMode) // IE8 or later 
     engine = document.documentMode; 
    else // IE 5-7 
    { 
     engine = 5; // Assume quirks mode unless proven otherwise 
     if (document.compatMode) 
     { 
     if (document.compatMode == "CSS1Compat") 
      engine = 7; // standards mode 
     } 
     // There is no test for IE6 standards mode because that mode 
     // was replaced by IE7 standards mode; there is no emulation. 
    } 
    // the engine variable now contains the document compatibility mode. 
} 

teraz czytać komentarze w kodzie Microsoft powyżej !!!!

O drugiej aktualizacji:
Dobre znalezisko na temat buforowania! Tak więc teraz problemem jest css. Ponieważ teraz zaczynasz rozumieć, dlaczego starsze aplikacje IE6 potrzebują IE6 (powód, dla którego IE6 jest tak trudny do zabicia), może powinieneś spojrzeć na conditional comments. Od:

  • są nie siekać (ale jako SDC zauważył w komentarzach, Microsoft dropped them z IE10 na i do przodu)
  • no javascript przeglądarki wąchania (nawet nie skrypt musiały być włączone, więc zawsze działa),
  • i może w szczególności objąć (zakres) wersje IE wyłącznie.

W nich można zawierać link do konkretnego css IE (utrzymanie dokument małe, chude i czytelne) ...

+0

Witam @GitaarLAB, dziękuję za sugestie! Oto, co mogłem się dowiedzieć: –

+0

- plik HTML jest statyczny i nie zawiera specyfikacji materiałowej ani niczego innego przed DTD - jakich ustawień w szczególności szukasz? tylko te zwykłe, jak sądzę: X-Powered-By, P3P, Content-Type/-Length, Etag, Cache-control, Last-modified i Cookie (poza tym są to domyślne nagłówki AWS) - text/html - nie, nie wiem, że znam - serwer intranetowy jest nieodróżnialny od serwera internetowego dla IE (obie używają adresów WAN IP) - nie, również wystąpił problem w 2 zupełnie różnych sieciach –

+0

Dzięki za linki, niestety Wspomniana strona nie obejmuje trybu standardowego IE6, który oczywiście ma IE7. :/Więc niewiele tam pomożemy. –

Powiązane problemy