Как вы можете заставить IE отображать в стандартном режиме, если у вас есть только контроль над содержимым тела? - PullRequest
6 голосов
/ 02 августа 2010

У меня есть особая ситуация, когда мне предоставляется только контроль над содержимым документа . Я предполагаю, что хост, чтобы оставаться гибким, не объявляет тип документа, который немедленно переводит IE в режим причуд. С моим ограниченным контролем над документом, что я могу сделать, чтобы заставить IE отображать страницу в стандартном режиме?

Ответы [ 3 ]

4 голосов
/ 02 августа 2010

Я полагаю, что вы ничего не можете с этим поделать, если не скажете, динамически переписать содержимое страницы с помощью JS и принудительно вставить тип документа.

Можете ли вы рассказать о том, какой контроль вы имеете над<body>?Вам разрешено делать JS / скриптинг?

РЕДАКТИРОВАТЬ : Вот попытка, но я не тестировал ее в IE.Это может дать вам идеи.Я document.write() outerHTML из document.documentElement, и он превращает compatMode в CSS1Compat.

Возможно, вам придется удалить блок скрипта при перезаписи.Как я уже сказал, Я бы не советовал попробовать это ...

http://medero.org/first-line.html

EDIT # 2 : Кажется, это удивительноработать в IE6.Но после обновления IE каким-то образом кеширует его, и он постоянно остается в своей .document.write() редактированной форме.Чтобы противостоять этому, добавьте его с помощью строки запроса, например, ?203984234.

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

РЕДАКТИРОВАТЬ # 3 : я переписал и связалdocument.write до window.onload.Вам нужно будет добавлять уникальную строку запроса каждый раз, когда вы посещаете ее, чтобы увидеть эффект, потому что он кэширует ее после .write.

http://medero.org/rewrite.html?f30324433322111

Если вам нужночто-то более мгновенное, вы, вероятно, можете подключить функцию готовности DOM jQuery, чтобы переписать ее до загрузки окна.


Разное Примечания:

  • Вы, вероятно, можете скрыть весь HTML-документ через CSS, пока не будет вызван document.write, если визуально это имеет значение
  • Вам следуетвозможно, перед сохранением outerHTML удалите файл <script> document.write, чтобы вновь записанная страница не имела блока script.
1 голос
/ 02 августа 2010

Взгляните на эту статью Определение совместимости документов на MSDN. Возможно, сработает метатег X-UA-Compatible.

0 голосов
/ 01 декабря 2011

Вот как мне удалось это решить, на основе ответа медера .

Сначала я попытался записать мета X-UA-Compatible, но это не сработало.

В конце документа (или в заголовке, но у меня тоже не было к нему доступа):

<script type="text/javascript">
if (navigator.appName == 'Microsoft Internet Explorer'){
    window.onload=function(){
        if (document.documentMode == 5){
            contents = document.documentElement.outerHTML;
            newdoc = document.open("text/html", "replace");
            newdoc.writeln('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">'); 
            newdoc.write(contents);
            newdoc.close();
        }
    };
}
</script>

Внутренний if предназначен для предотвращения бесконечного цикла. Возможно, было бы лучше удалить сам код, скажем, поместив его в функцию и удалив вызов функции с помощью string.replace(), но я не мог заставить это работать, поэтому пришлось согласиться на это.

...