Будет ли iframe отображаться в режиме причуд? - PullRequest
11 голосов
/ 15 сентября 2010

Я работаю над настройкой страницы и испытываю трудности с тем, чтобы она хорошо смотрелась в разных браузерах (на самом деле это просто IE, так как он корректно отображается для mozilla и webkit).Я хочу исключить режим причуд, прежде чем серьезно рассмотреть старые ошибки IE, исправленные начиная с IE6.Страница контейнера имеет объявленный тип документа, а код iframe - нет.Будет ли содержимое iframe отображаться в режиме quirks (поскольку он не имеет типа документа) или в стандартном режиме (поскольку контейнер имеет тип документа)?Источник следует этой схеме:

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

Ответы [ 3 ]

23 голосов
/ 11 апреля 2011

До IE9 веб-страница в iframe отображалась в соответствии со своим собственным типом документа, а не в соответствии с типом документа родительского контейнера. Однако в IE9 Microsoft изменила поведение так, чтобы дочерний iframe наследовал свой тип документа / рендеринг от родительского контейнера.

Обратите внимание, что IE9 будет по-прежнему вести себя традиционным образом (iframe учитывает свой собственный тип документа) всякий раз, когда используется представление совместимости.

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

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7">
<meta http-equiv="X-UA-Compatible" content="IE=8" />

Эти теги, по сути, скажут IE9 притвориться, что это IE7 или IE8. В эмуляцию включена логика, используемая для определения режима рендеринга для дочернего iframe. Недостатком этого обходного пути является то, что вы не сможете использовать какие-либо новые функции, поддерживаемые IE9 на родительской странице, но это, вероятно, предпочтительнее массовых ошибок рендеринга на дочерней странице.

См. http://web.archive.org/web/20110905060718/http://www.sitepoint.com/forums/html-xhtml-52/ie9-iframes-doctypes-you-743000.html для получения дополнительной информации.

15 голосов
/ 15 сентября 2010

CAVEAT EMPTOR

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


Quirksmode: IE отображает iframes как отдельные узлы документа, doctype не наследуется, а quirks используется по умолчанию.: чья-то демонстрация вашей проблемы и доказательство отсутствия наследования (благодаря моим закладкам: P)

Однако вы выбрали «Почти» в качестве вашего типа документа, что означает, что iframes arenв любом случае не разрешеноЕдинственный способ получить действительный iframes - это если у родителя были причуды, что делает наследство спорным или нет.

Рекомендуемое значение .

2 голосов
/ 22 марта 2013

Смотрите мой ответ здесь для документированного MSDN решения для IE9: Как заставить Iframe запускать quirks в стандартном родительском фрейме

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

JSBinдемоверсия: http://jsbin.com/ozejuk/1/

Подробнее: http://msdn.microsoft.com/en-us/library/gg558056(v=vs.85).aspx

...