Переключение Javascript с модного режима на стандартный - PullRequest
0 голосов
/ 13 августа 2011

Есть ли способ переключить страницу в режиме quirksmode в стандартный режим, используя Javascript?

Например, если у меня есть следующая страница с html.Я попробовал следующее.

<html><script src="js.js"></script></html>

и следующее содержимое в js.js

document.open();
document.write('<!doctype html><html></html>');
document.close();

Из просмотра вышеизложенного я в основном пытаюсь преобразовать страницу в режиме quirksmodeв режиме стандартов, но это не работает.(настройка содержимого страницы, как указано выше, в iframe работает нормально)

iframe Работает

Работает, вы добавляете document.createElement('iframe') в документ и вызываете iframe.contentWindow.document.write('<!doctype html>..'); на нем.К сожалению, тот же метод не работает, если я вызываю его на текущей странице.

Есть ли у кого-нибудь исправление, переключающее страницу в режиме quirksmode в стандартный режим?1020 * Создание и добавление iframe и просто установка его высоты и ширины на 100%, работает, но не является целью;)

Ответы [ 3 ]

3 голосов
/ 13 августа 2011

Браузер обычно ищет тип документа во время загрузки , чтобы определить, использовать ли «стандартный режим» или нет, и загружает / отображает страницу на основе этого решения. Даже если вам удастся вставить объявление doctype с помощью скрипта, оно не будет вовремя иметь значение.

Причина, по которой он работает в iframe, заключается в том, что контент является новым документом, который «загружается» по мере его написания. Поскольку там указан тип документа, этот контент отображается в стандартном режиме.

Как уже упоминалось в другом вопросе по этой же теме , вы могли бы быть в состоянии переписать весь документ. По сути, (если страница все еще находится в режиме причуд), получите document.documentElement.innerHTML, а затем напишите новый документ с правильным типом документа и добавьте HTML-код из исходного документа. Но это вызовет кучу проблем со скриптами и тому подобным, и его следует избегать. Идеальное решение состоит в том, чтобы исправить HTML-код, включив в него тип документа, а не выдумывать его с помощью скрипта.

1 голос
/ 13 августа 2011
<script>
document.open();
document.write('<!doctype html><html></html>');
document.close();
</script>

или любой другой вариант не будет работать, потому что тег <SCRIPT> заставляет анализатор HTML создавать элемент HTML и элемент HEAD, если их нет.К тому времени, когда элемент HTML существует (даже неявный), DOCTYPE в потоке токенов игнорируется.

Закрытие и повторное открытие документа просто предотвратит разбор любого из следующего содержимого HTML.

Единственный способ использовать document.write для вывода DOCTYPE - создать новый пустой документ, в который вы можете писать.

Просто решите это на стороне сервера.

0 голосов
/ 13 августа 2011

Вы можете попробовать написать метатег X-UA-совместимый:

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