iframe не отображается в режиме IE9, когда содержащая страница находится в режиме совместимости

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

Содержащаяся страница интенсивно использует новые функции JavaScript (особенно хорошие функции с массивами) и рендеринг SVG. Хотя я могу достаточно легко объединить функции массива, я не могу заставить визуализировать svg.

Чтобы было ясно, внутренняя страница НЕ работает в режиме quirks - я указал doctype и тег ie = edge ‹meta>. Похоже, он использует режим рендеринга ie8 (сложно сказать наверняка)

Образец проблемы находится здесь: http://stevesspace.com/quirks/quirks.html - загрузите его в Chrome, чтобы увидеть ожидаемый результат, и проверьте его в IE9 или 10 для фактического вывода.

РЕДАКТИРОВАТЬ: Я добавил в образец режим документа и режим совместимости, я могу подтвердить, что он использует режим документа IE8.


person XwipeoutX    schedule 17.09.2012    source источник
comment
возможный дубликат Будет ли отображаться iframe в режиме совместимости?   -  person GolezTrol    schedule 18.09.2012
comment
Судя по всему, тип документа унаследован от IE9. И ваш тест верен: страница становится красной внутри IFrame, но не когда вы открываете ее вне IFrame (IE) или вообще в Chrome. Теперь как решить ... не знаю. : - / Тем не менее, хороший вопрос с хорошими доказательствами.   -  person GolezTrol    schedule 18.09.2012
comment
Вот совет, как хотя бы исправить любые проблемы с CSS, связанные с этой проблемой. Однако не исправляет quirks-mode. css-tricks.com/ie-iframe-quirksmode   -  person GolezTrol    schedule 18.09.2012
comment
@GolezTrol Я хорошо рассмотрел этот вопрос - хотя моя проблема на самом деле обратная. Iframe не работает в режиме совместимости - он работает в режиме IE8. Предполагается, что тег doctype / meta исправит это, но не исправляет. Я нормально отношусь к тому, что мне приходится использовать прокладку всех функций JS, но поддержка SVG очень важна, и это не может быть устранено.   -  person XwipeoutX    schedule 18.09.2012
comment
Возможно, вы можете использовать такую ​​библиотеку code.google.com/p/svgweb (flash ) или этот code.google.com/p/svg2vml (svg- ›vml) в в таких случаях визуализируйте графику по-другому. Становится неприятно, но я не знаю, что еще. Я могу найти проблему (и «обратную проблему») во многих местах, но ничего, что привело бы к решению.   -  person GolezTrol    schedule 18.09.2012
comment
Просто для дерьма и хихиканья, пробовали ли вы поместить документ в iframe в другой iframe (вложенный) внутри документа quirks? Не знаю, почему это сработает, но я не раз удивлялся подобным обходным путям. ;)   -  person GolezTrol    schedule 18.09.2012
comment
Да, здесь не повезло - я считаю, что проблема в том, что IE поддерживает только 1 режим рендеринга на вкладку, поэтому вложение ничего не делает. Я сейчас изучаю тег ‹object›, на самом деле он выглядит весьма обнадеживающим.   -  person XwipeoutX    schedule 18.09.2012
comment
Хорошо! Если это окажется решением, опубликуйте его как ответ на этот вопрос, чтобы, наконец, найти способ решения этой проблемы. :)   -  person GolezTrol    schedule 18.09.2012


Ответы (1)


В итоге я использовал тег объекта вместо iframe, похоже, он работает нормально в современных браузерах.

<object type="text/html" data="http://example.com"></object>

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

Обновление: этот тег также может находиться на промежуточной странице, на которую указывает iframe, и все работает нормально Обновление 2: это решение не работает в IE10

person XwipeoutX    schedule 20.09.2012
comment
Можете ли вы расшириться? У меня отлично работает. - person XwipeoutX; 21.02.2013
comment
Что происходит с решением ‹object› в IE10? Решение iframe в IE10, похоже, отображает родительский элемент как Quirks, а внутренний как стандартный режим IE10, что, я думаю, именно то, что вы хотели. - person Scott Stafford; 04.05.2013
comment
Извините за медленный ответ. У меня не было такого поведения - см. stevesspace .com / test / quirks /. Обратите внимание, что IE10 переключил режим браузера, если родительская страница - Quirks, но не в IE8 ... - person XwipeoutX; 27.05.2013
comment
Использование OBJECT вместо IFRAME решило мою проблему с режимом рендеринга. Но в теге OBJECT есть поле contentWindow, а в теге IFRAME есть. Таким образом, я не могу использовать postMessage API - person Julien Kronegg; 22.01.2014
comment
после нескольких часов попыток отобразить главную страницу как IE8 (чтобы сохранить старый код js) и iframe как IE9 (чтобы показать svg), я нашел здесь этот тег объекта. это отлично сработало для моих нужд, в то время как iframe сильно отстой в IE. - person A. Binzxxxxxx; 02.10.2014