Jump to content
  • 0

Как принудительно заставить IE работать в стандартном режиме?


LittlePony
 Share

Question

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> и страница в любом IE разваливается.

Если поменять на <!DOCTYPE HTML>, то начинает работать правильно.

Но у меня есть возможность править только то, что внутри <body>. Как можно в таких условиях переключить IE в стандартный режим?

Link to comment
Share on other sites

12 answers to this question

Recommended Posts

  • 0

Задайте правильный доктайп


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

либо пропишите

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

чтоб не дать IE уйти в режим совместимости.

ЗЫ

<!DOCTYPE html>

- это правильный доктайп для HTML5

ЗЫЗЫ про доктайпы можно почитать тут, а про режимы IE тут

Edited by wwt
Link to comment
Share on other sites

  • 0
<meta http-equiv="X-UA-Compatible" content="IE=Edge">

Единственный известный мне способ перевести IE в стандартный режим в обход доктайпа. Но работает начиная с IE8, так что IE7 и ниже останутся разваленными.

И всё равно, имхо, это полумера, т.к. др. браузеры останутся в Quirks mode (хоть он у них и не такой ужасный) и разбежка со стандартным отображением всё равно будет.

это правильный доктайп для HTML5

Это доктайп HTML5 для перфекционистов:). По стандарту и на практике короткий доктайп может быть в любом регистре.

Link to comment
Share on other sites

  • 0

К сожалению, meta можно поставить только в head, а у меня нет такой возможности, могу править только содержимое body.

Может быть, есть способ заставить IE работать средствами js или вообще каким-нибудь специфичными?

Edited by LittlePony
Link to comment
Share on other sites

  • 0

Автор написал же, что править может только то что в <body>. Метатеги в боди ставить бесполезно, следовательно никак его не заставить.

UPD:

А что если перед </body> влупить скрипт:


document.getElementsByTagName('head')[0].innerHTML += '<meta http-equiv="X-UA-Compatible" content="IE=Edge">';

  • Like 1
Link to comment
Share on other sites

  • 0

Боюсь, что никак :(

А почему нет доступа к началу страницы?

На самом деле есть, при помощи служебной записки в ДИТ, затем непосредственному руководству, затем двух заявлений, решения экспертной комиссии, запроса в финотдел на выделение бюджета, тестирования изменённой части страницы в песочнице в течение установленного экспертной комиссией срока и затем перевода страницы в продакшн опять же на основе экспертной комиссии силами ДИТ. Как-то так, если сильно упрощённо.

Проект сдавать в понедельник.

Link to comment
Share on other sites

  • 0

Боюсь, что "влупка" скрипта не поможет — режим рендеринга начинает действовать при любом выводе (поэтому волшебная мета должна идти даже перед <title>!), поэтому перестройка DOM при уже установленном режиме не влияет.

На простом лабораторном примере вроде бы работает такое:


<script>
if (window.name != location.href) {
window.name = location.href; //во избежание зацикливания
location = "javascript:'<!doctype html>' + document.body.parentNode.outerHTML";
}
</script>

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

Боюсь, что в итоге придется ковыряться в рамках ограничений Quirks mode — с применением доп. оберток, распорок и прочего арсенала первобытной верстки. Ни на кого другого спихнуть эту работу никак нельзя? ;)

Link to comment
Share on other sites

  • 0

Боюсь, что "влупка" скрипта не поможет — режим рендеринга начинает действовать при любом выводе (поэтому волшебная мета должна идти даже перед <title>!), поэтому перестройка DOM при уже установленном режиме не влияет.

На простом лабораторном примере вроде бы работает такое:


<script>
if (window.name != location.href) {
window.name = location.href; //во избежание зацикливания
location = "javascript:'<!doctype html>' + document.body.parentNode.outerHTML";
}
</script>

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

Боюсь, что в итоге придется ковыряться в рамках ограничений Quirks mode — с применением доп. оберток, распорок и прочего арсенала первобытной верстки. Ни на кого другого спихнуть эту работу никак нельзя? ;)

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

Link to comment
Share on other sites

  • 0


<script>
if (window.name != location.href) {
window.name = location.href; //во избежание зацикливания
location = "javascript:'<!doctype html>' + document.body.parentNode.outerHTML";
}
</script>

Развитие нехорошей магии:


if (window.name != location.href && $.browser.msie) {
window.name = location.href;
location = "javascript:'<!doctype html>' + document.body.parentNode.outerHTML";
} else {
$(function(){$("#all").load("include.php")})
}

Ужас! :) Но работает :) Спасибище!

  • Like 1
Link to comment
Share on other sites

  • 0
<meta http-equiv="X-UA-Compatible" content="IE=Edge">

Единственный известный мне способ перевести IE в стандартный режим в обход доктайпа. Но работает начиная с IE8, так что IE7 и ниже останутся разваленными.

И всё равно, имхо, это полумера, т.к. др. браузеры останутся в Quirks mode (хоть он у них и не такой ужасный) и разбежка со стандартным отображением всё равно будет.

это правильный доктайп для HTML5

Это доктайп HTML5 для перфекционистов:). По стандарту и на практике короткий доктайп может быть в любом регистре.

Чтоб заставить IE не падать в режим совместимости можно использовать заголовки HTTP:

пример для apache из Boilerplate, можно просто пихнуть в .htaccess , но это опять же для ie8+


<IfModule mod_headers.c>
Header set X-UA-Compatible "IE=Edge,chrome=1"
# mod_headers can't match by content-type, but we don't want to send this header on *everything*...
<FilesMatch "\.(js|css|gif|png|jpe?g|pdf|xml|oga|ogg|m4a|ogv|mp4|m4v|webm|svg|svgz|eot|ttf|otf|woff|ico|webp|appcache|manifest|htc|crx|oex|xpi|safariextz|vcf)$" >
Header unset X-UA-Compatible
</FilesMatch>
</IfModule>

Для IIS что-то вроди такого:


<system.webServer>

<httpProtocol>
<customHeaders>
<clear />
<add name="X-UA-Compatible" value="IE=Edge" />
</CustomHeaders>
</HttpProtocol>

</System.webServer>

так же заголовок можно отсылать и из php. Ну и вместо Edge можно подставлять другой параметр в зависимости от версии браузера - в случае с php это идеальный вариант можно отсылать заголовок для нужной версии IE и ненужны никакие meta.


header("X-UA-Compatible: IE=Edge");

А про доктайп html5 я написал так как привык сам, и имел ввиду не регистр символов, а то что человек написал доктайп верно по сравнению с <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">.

Edited by wwt
  • Like 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy