XHTML Strict – документ в документе без iframe.
6.09.2023Если вы создаете веб-страницу соответствующую типу документа: XHTML 1.0 Strict или XHTML 1.1, то она не может содержать в HTML-коде элемент iframe
.
?ными словами, если в начале документа указывается такое объявление:
br>
"http://w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
или такое:
br>
"http://w3.org/TR/xhtml11/DTD/xhtml11.dtd">
,
то в самом документе не должно быть ничего подобного:
Но это вовсе не проблема, потому что для внедрения в HTML-документ каких-либо объектов, существует элемент с вполне логичным названием object
. С его помощью можно добавлять в документ flash-ролики, аудио-, видеоролики, а также другие HTML-документы. На последних остановлюсь подробнее.
Синтаксис простой, HTML-код:
.
Получается:
Как обычно, в Firefox и Opera все выглядит замечательно, а вот в Internet Explorer вокруг встроенного документа появилась граница, а справа еще и скроллинг.
Важное замечание. Если вы читаете этот текст в Firefox или Opera, вы не сможете увидеть, ради чего он написан. Чтобы убедиться в справедливости написанного и увидеть все своими глазами, вам следует открыть эту страницу в Internet Explorer 6 и 7.
Опытным путем удалось выяснить, что их появление напрямую связано с Doctype. Чтобы было понятно, о чем идет речь, следует вернуться на пару лет назад и обратиться к странице Различное отображение HTML документов в браузере зависит от объявленного Doctype. Дело осложняется еще и тем, что в различных версиях Internet Explorer одинаковый код показывается по разному. ?так, остается подобрать правильный Doctype, если вам важно, чтобы страница была кроссбраузерной и прилично выглядела без навязываемого браузером скроллинга и рамки.
В ходе эксперимента используется документ с простейшей разметкой:
hotibo.ru :: The object tag test
XHTML 1.0 Transitional
Это базовый документ, далее у него будет изменяться только Doctype и все, что с ним связано. Всего сделано восемь таких документов. Начали!
XHTML 1.0 Transitional doctype вместе с XML объявлением
XHTML 1.0 Transitional doctype без XML объявления
HTML 4.0 Transitional doctype с URL
HTML 4.01 Transitional doctype с URL http://w3.org/TR/1999/REC-html401-19991224/loose.dtd
HTML 4.01 Transitional doctype с URL http://w3.org/TR/html4/loose.dtd
HTML 4.01 Transitional doctype без URL
Вот здесь, похоже мы и приблизились к истине, но картина будет не полной, если не попробовать вообще убрать Doctype.
Вывод неутешительный, так как легко заметить, что рамка и скроллинг в Internet Explorer исчезают, если импортируемый документ обрабатывается браузером в Quirks Mode, т.е. в режиме обратной совместимости.
Замечание. Внимательные читатели заметят, что использовались не все возможные типы документа. Это действительно так, потому что проверка всех вариантов займет куда больше времени, но я не уверен, что это может повлиять на результат. Если все-таки заметите неточности или продолжите эксперимент с другими Doctype — оставляйте свои комментарии.
если используется object, то в IE перестаёт работать window.frameElement
iframe можно использовать в xhtml, если подключить модуль iframe или самим расширить доктайп
раз уж вы используете транзишнл доктайп, то iframe вроде как там уже есть
ну и на правах извращения:
сия весч IE подсовывает iframe, а ie/opera/safari – object
чтобы xslt сработал нужно отдавать страницу как application/xml
2007-09-07 at 6:16 pm
?дея замечательная, но вот в чем проблема – если я хочу отобразить документ, расположенный на другом сайте, то IE7 не показывает его вовсе – говорит, что слишком небезопасно… Возможно ли это как-то обойти?
У FF это проблемы нет…
2007-09-07 at 8:09 pm
Хороший материал. Спасибо.
2007-09-07 at 10:23 pm
2Аркадий – у меня такая же проблема, если кто-то решил дайте знать
а вообще, это шаманство какое-то… приходиться каждый раз как-то выкручиваться перебирвать все возможные и невозможные варианты
2007-09-12 at 4:23 pm
Смог убить прокрутку в стандартном режиме добавлением строчки CSS:
html { overflow: hidden; }
2007-09-28 at 5:43 am
2 SelenIT, этим ты совсем её убил. Ставьте:
body,html{
width:100%;
height:100%;
}
html{
overflow:auto;
}
и будет вам счастье :)
2007-10-01 at 11:20 am
moro, согласен, так будет больше похоже на дефолтное поведение в Quirks mode. А суть дела, насколько я понимаю, в том, что в стандартном режиме основной скроллинг является “собственностью” не body, а documentElement’а…
2007-10-03 at 12:39 am
Вроде нечто похожее на wxcode.com
Работает также и в Firefox. В Opera – нет.
2007-10-03 at 12:55 am
У меня такая проблема. С помощью тэга нужно вставить картинку в сайт. В IE 7 у меня вовсе не показывается эта картинка, только надпись и еще выскакивает всплывающее окно. В других браузерах Mozilla, Opera все отображается корректно. Помогите решить эту проблему.
2007-10-07 at 4:58 pm
А как добраться к подобным объектам в дереве?
Предположим есть a.html и b.html.
Мне нужно чтоб b.html отображался одним стилем, а a.html. Но когда b.html вставлен в а.html, через object, они должны отображаться одинаково.
Спасибо.
2007-11-08 at 2:22 pm
Если не затруднит, покажите на примере этой страницы. Объект с текстом BackCompat. No doctype.
html > body > div > div > div > div > div > object
2007-11-08 at 2:28 pm
Прикольно
2007-11-13 at 12:52 pm
а таржет на нем будет работать , как для ифрейма ?
2007-12-11 at 10:09 am
2 интернет бизнес: таржета в указанных стандартах тем более нет. Только JS. Если нужен таржет, значит, не нужен стрикт-стандарт (и можно смело юзать ифрейм;) и наоборот.
2008-01-15 at 9:11 pm
To SelenIT:
Есть таргет, подробности на форуме. Как раз с iframe в рамках DTD у меня ничего не получилось. Правда я и не спец.
2008-01-23 at 1:43 pm
шкипер, нету его там, нету :). Я на форуме отписался по этому поводу.
2008-01-29 at 8:34 am
Спасибо грамотно разесняете
2008-03-06 at 3:14 am
возникла такая задачка: как запретить загружать свою страницу в iframe объявленном через object?
раньше решалось через self!=top, но в случае object self==top : true и self.location указывает на урл родителя.
2008-03-22 at 1:33 pm
Честно сказать, не очень хорошо, сейчас бы не стал так делать ни за что
$(”#pumpurum”).load(”http://…”);
http://docs.jquery.com/Ajax/load
Работает везде, тут тебе и эмуляция “target” и обращаться проще
2008-03-31 at 8:42 pm
Это практически бесполезно без TARGET.
2008-04-07 at 6:06 pm
А для чего вообще париться с XHTML? Не понимаю проблемы. Я использую !DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” и ни на что не жалуюсь. Кто-то скажет, чем Хштмл круче ШТМЛ?
2008-04-13 at 3:51 pm
Internet Explorer в корзину надо!
2008-04-25 at 10:56 pm
Согласен. IE который не поддерживает половино из новых стандартов.. не уважают юзеров и веб девелоперов. За что нам уважать IE в корзину его.
2008-04-28 at 8:56 pm
Спасибо вам огромнейшее за материал, а то уже всю голову сломал себе пока не нашел эту статью. Теперь вышло так как задумал.
2008-05-05 at 12:56 am
Mons :
>Согласен. IE который не поддерживает половино из новых стандартов.. не уважают юзеров и веб девелоперов. За что нам уважать IE в корзину его.
Юзеры кто?
За изложенный материал спасибо. ?спользую, по мере необходимости.
2008-06-15 at 4:04 pm
Да ?Е не фонтан, но только из анализа – большинство юзеров заходят именно под ним. Для некоторых, firefox и opera – не больше чем ругательства.
2008-06-19 at 9:23 pm
Спасбо за мануал!
2008-08-29 at 5:15 pm