Время от времени всплывает умирающая технология XSLT и задаёт непростые вопросы. Как, например, взять максимум от 2 чисел в выражении или как организовать цикл. Соединением многих таких вопросов служит пагинатор — вывод навигации по нескольким страницам и, по возможности, удобный. На Javascript есть много примеров простых и удобных пагинаторов. Но если страницы с сервера выдаются в XML, то возникает крамольная мысль: почему бы всё оформление страниц, включая пагинатор, не сделать на статике, в XSLT? Ничего, что в эту статику можно включить JS и сделать всё проще. Кошерный подход лёгких путей не ищет.
0
Рейтинг
XSLT *
Язык преобразования XML-документов
Сначала показывать
Порог рейтинга
Уровень сложности
Использование XSLT для предотвращения XSS путем фильтрации пользовательского контента
9 мин
7.4KRecovery Mode
Формулировка проблемы
Думаю никому из веб-разработчиков не нужно объяснять что такое XSS и чем он опасен. Но в то же время, многие сайты, такие как форумы, блоги, социальные сети и т.п., стремятся предоставить пользователю возможность вставлять на страницу свой контент. Для удобства неискушенных пользователей изобретаются WYSIWYG-редакторы, делающие процесс добавления красивого комментария легким и приятным. Но за всем этим фасадом скрывается угроза безопасности. Фактически любой WYSIWYG-редактор отправляет на сервер не просто текст комментария, он отправляет HTML-код. И даже если сам редактор не предусматривает использования опасных HTML-тегов (например <iframe>), то злоумышленника это не остановит — он может послать на сервер произвольный HTML-текст, который может представлять опастность для других посетителей сайта. Я думаю мало кому понравится получить в свой браузер что-то наподобие:
<script type="text/javascript">window.location="http://hardcoresex.com/";</script>
Таким образом, возникает проблема: полученный от пользователя HTML-код необходимо фильтровать. Но что значить «фильтровать»? Каким должен быть алгоритм фильтрации, чтобы не создавать необоснованных ограничений легальным пользователям, но в то же время сделать невозможной XSS-атаку со стороны злоумышленника? Увы, но HTML достаточно сложен, написать хороший парсер достаточно непросто, а любая ошибка в нем может привести к тому, что у злоумышленника появится лазейка через которую он сможет нанести удар.
+22
Zend Framework: XSL и самостоятельная сериализация Views
6 мин
3.5KПеревод статьи Zend Framework: XSL and self-serializing Views
Автор: Pascal Opitz
Я давно утверждал, что фраемворки MVC должны использовать стили XSL вместо встроенного PHP кода и прочего. Вот почему я постучал вместе немного доказательство концепции Zend Framework, где представления файлов в виде XSL шаблона, а представление сериализует себя в XML для рендеринга.
Автор: Pascal Opitz
Я давно утверждал, что фраемворки MVC должны использовать стили XSL вместо встроенного PHP кода и прочего. Вот почему я постучал вместе немного доказательство концепции Zend Framework, где представления файлов в виде XSL шаблона, а представление сериализует себя в XML для рендеринга.
0
Easyweb: Новогоднее обновление
7 мин
7.7KВ моем предыдущем посте, представившем многоуважаемой публике веб-движок Easyweb, было сказано:
Поскольку до конца года осталось менее суток, то позвольте рассказать о том, что еще удалось сделать в этом году.
Планируется, что первая версия, которую можно будет назвать стабильной и полностью юзабельной, появится до конца года.
Поскольку до конца года осталось менее суток, то позвольте рассказать о том, что еще удалось сделать в этом году.
+2
Easyweb — XSLT-движок для веба
10 мин
8KEasyweb — это верстальный движок общего назначения, написанный на PHP, и предназначенный для выдачи XML-ответа по HTTP-запросу. В его основе лежит шаблонизатор XSLT, а сам движок представляет собой набор решений основных задач в вебе: роутинг запросов, разграничение прав доступа, разделение способов получения данных и способов их представления, локализация, вспомогательные PHP классы и фасилити, и так далее. Проект является сборником архитектурных и концептуальных идей, накопившихся за шесть-семь лет разработки для веба.
Если говорить о классификации, то Easyweb, вероятно, больше всего похож на Content Management Framework. Он, в некотором смысле, немного выше уровнем, чем большинство программных фреймворков, поскольку основная часть продукта, созданного на Easyweb, выстроена на XML-технологиях. В то же время он гораздо ниже уровнем, чем привычные CMS — в нем нет встроенного пользовательского интерфейса, готовых шаблонов страниц или предустановленного набора SQL-запросов.
В двух словах, сайт или XML-сервис на Easyweb — это XML-конфиг, набор шаблонов страниц, база данных, а также скрипты для обработки POST-запросов. Все перечисленное создается вебмастером самостоятельно в его любимом текстовом редакторе, а также админке его любимой СУБД. Easyweb будет интересен тем, для кого выполняются все перечисленные условия:
Если говорить о классификации, то Easyweb, вероятно, больше всего похож на Content Management Framework. Он, в некотором смысле, немного выше уровнем, чем большинство программных фреймворков, поскольку основная часть продукта, созданного на Easyweb, выстроена на XML-технологиях. В то же время он гораздо ниже уровнем, чем привычные CMS — в нем нет встроенного пользовательского интерфейса, готовых шаблонов страниц или предустановленного набора SQL-запросов.
В двух словах, сайт или XML-сервис на Easyweb — это XML-конфиг, набор шаблонов страниц, база данных, а также скрипты для обработки POST-запросов. Все перечисленное создается вебмастером самостоятельно в его любимом текстовом редакторе, а также админке его любимой СУБД. Easyweb будет интересен тем, для кого выполняются все перечисленные условия:
- Если вас по каким-либо причинам не устраивают существующие CMS;
- Если вы задумываетесь о том, что нужно «написать все самому»;
- Если вас пугает сложность существующих программных фреймворков;
- Если вы любите XHTML, а также дружное семейство XML-технологий.
+3
Использование xslt-шаблонов в реальных проектах
7 мин
32KВ статье вы не найдёте сравнительных тестов шаблонизаторов. Зато найдёте информацию об использовании xslt в качестве шаблонизатора на реальных проектах. Рассмотрены возможности именованных шаблонов, использование шаблонов-функций, справочников.
Обычно страница сайта состоит из нескольких общих блоков (меню, футер, ...) и контентной части, которую для общности будем называть основным блоком. Все эти блоки размещаются внутри некоторого индексного шаблона, который знает в каком месте какой блок отобразить: меню должно быть вверху, основной блок в центре, а футер внизу.
Получаем следующую структуру
Контроллер главной страницы кабинета пользователя работает следующим образом:
1. Структура проекта
Обычно страница сайта состоит из нескольких общих блоков (меню, футер, ...) и контентной части, которую для общности будем называть основным блоком. Все эти блоки размещаются внутри некоторого индексного шаблона, который знает в каком месте какой блок отобразить: меню должно быть вверху, основной блок в центре, а футер внизу.
Получаем следующую структуру
/themes - здесь раполагаются все шаблоны
/themes/index/main.xsl - индексный шаблон
/themes/models/user.xsl - именованные шаблоны, которые относятся к модели пользователя
/themes/inc/functions.xsl - именованные шаблоны-функции
/themes/blocks/footer.xsl - шаблон футера
/themes/blocks/menu.xsl - шаблон меню
/themes/cabinet/main.xsl - шаблон основного блока главной страницы кабинета пользователя
Контроллер главной страницы кабинета пользователя работает следующим образом:
- получает данные для основного блока, обрабатывает их с помощью /themes/cabinet/main.xsl и результат (готовый html) помещает в итоговый xml
- аналогично обрабатывает данные для других блоков (меню, футер) и результат помещает в xml
- итоговый xml, в котором находятся данные всех блоков, обрабатывает с помощью индексного шаблона /themes/index/main.xsl и результат отдаёт пользователю в виде html.
+14
Добавляем сахар в XSLT
4 мин
4.1KПростой шаблон, который преобразовывает XSLT с небольшим добавлением синтаксического сахара в обычный XSLT. Вместо описания привожу маленький пример, в котором используются все новые конструкции.
<p x:each="item" x:if-attr="position() mod 2" x:attr-class="'odd'" xmlns:x="xslt-sugar">
<span class="date" x:value="date"/>
<xsl:value-of select="title"/>
<x:block x:if="description" x:value="concat(' ', description)" x:doe="yes"/>
</p>
+13
Случайная сортировка и вывод случайных элементов в XSLT
4 мин
3.3KВступление
В этой статье хочу поделиться с Вами моими попытками создать случайную (хотя уместнее буде сказать псевдослучайную) сортировку средствами XSLT, без использования сторонних приложений и расширений.
Изначально была задача сделать сортировку под PHP-ный XSLT процессор. Но захотелось сделать что-то более универсальное.
Опытный образец
Для начала нам понадобиться образец для тестирования сортировки. Не будем заниматься хитросплетениями и напишем просто.
Файл данных data.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="view.xsl"?>
<root>
<item id="1"/><item id="2"/><item id="3"/><item id="4"/><item id="5"/><item id="6"/><item id="7"/><item id="8"/><item id="9"/><item id="10"/>
</root>
+18
Многоуровневое меню в XSLT
3 мин
3.9KЗдравствуйте уважаемые Хабровчане. Хочу представить шаблон вывода многоуровневого меню, хотя, немного переделав, сойдет для вывода обычных деревьев. На нашем любимом сайте подобного не видел, в инете особо не искал. Для кого-то может показаться слишком легким, но надеюсь другим понадобиться.
Вот здесь уже разбиралась тема построение деревьев. В этом примере другая структура XML файла и заточка под другие задачи.
Начнем с XML файла. Структура не сложная. Каждый элемент состоит из идентификатора, идентификатора родительского элемента, ссылки и названия.
Вот здесь уже разбиралась тема построение деревьев. В этом примере другая структура XML файла и заточка под другие задачи.
Начнем с XML файла. Структура не сложная. Каждый элемент состоит из идентификатора, идентификатора родительского элемента, ссылки и названия.
+1
Постраничная навигация в XSLT
5 мин
3.9KЗдравствуйте уважаемые Хабровчане. Недавно встретилась задача вывода постраничной навигации с помощью технологии XSLT. После безрезультатных поисков по интернету типовых решений, было принято решение изобрести свой велосипед.
Дано: Номер текущей страницы получаемой из GET запроса. XML файл, состоящий из корневого элемента, в котором множество вложенных однотипных элементов. Для краткости сократим файл до вот такого вида:
Файл данных nav.xml
Надо: Обеспечить постраничную навигацию. Если страница не первая выводилось назад и в начало. Если страница не последняя выводилось далее и в конец. Число элементов на странице, число страниц до и после текущей страницы можно было изменять.
Дано: Номер текущей страницы получаемой из GET запроса. XML файл, состоящий из корневого элемента, в котором множество вложенных однотипных элементов. Для краткости сократим файл до вот такого вида:
Файл данных nav.xml
<?xml version="1.0" encoding="UTF-8"?>
<root>
<item id="1"/><item id="2"/><item id="3"/><item id="4"/><item id="5"/><item id="6"/><item id="7"/><item id="8"/><item id="9"/><item id="10"/><item id="11"/><item id="12"/><item id="13"/><item id="14"/><item id="15"/><item id="16"/><item id="17"/><item id="18"/><item id="19"/><item id="20"/><item id="21"/><item id="22"/><item id="23"/><item id="24"/><item id="25"/><item id="26"/><item id="27"/><item id="28"/><item id="29"/><item id="30"/><item id="31"/><item id="32"/><item id="33"/>
</root>
Надо: Обеспечить постраничную навигацию. Если страница не первая выводилось назад и в начало. Если страница не последняя выводилось далее и в конец. Число элементов на странице, число страниц до и после текущей страницы можно было изменять.
+1
Производительный и читабельный XSLT: сборник советов
7 мин
10KВ моей практике чаще всего в качестве шаблонизатора используется именно XSLT. Я не буду рассуждать о том, почему так происходит — о преимуществах данной технологии написано вполне достаточно. Но ещё больше написано о её недостатках. Считается, что XSLT является слишком многословным и тяжёлым для чтения, а также не самым производительным. В этой статье я постараюсь собрать несколько советов по улучшению качества XSLT-кода с точки зрения читабельности и выразительности. Некоторые из них также позволят XSLT работать несколько быстрее.
Многие «проблемы» XSLT связаны с тем, что мы слишком часто пытаемся писать на нём в процедурном стиле. Мы постоянно пытаемся сделать из него Smarty, но упираемся в один простой факт — XSLT является декларативным языком, как бы необычно это для нас не выглядело.
Например, мы пытаемся использовать именованные шаблоны, воспринимая их как процедуры, выводящие данные в определённом формате:
Наверное, многие программисты именно так написали свой первый шаблон. И он неплохо решает свою задачу. Декларативный XSLT предлагает немного другой подход:
Разница совсем не велика. Дело вкуса и стиля программирования. Давайте посмотрим, как шаблон будет использоваться в дальнейшем.
Именованные шаблоны
Многие «проблемы» XSLT связаны с тем, что мы слишком часто пытаемся писать на нём в процедурном стиле. Мы постоянно пытаемся сделать из него Smarty, но упираемся в один простой факт — XSLT является декларативным языком, как бы необычно это для нас не выглядело.
Например, мы пытаемся использовать именованные шаблоны, воспринимая их как процедуры, выводящие данные в определённом формате:
<xsl:template name="CreateItemLink">
<xsl:param name="item"/>
<a href="/item/?id={$item/id}">
<xsl:value-of select="$item/name"/>
</a><br/>
</xsl:template>
* This source code was highlighted with Source Code Highlighter.
Наверное, многие программисты именно так написали свой первый шаблон. И он неплохо решает свою задачу. Декларативный XSLT предлагает немного другой подход:
<xsl:template match="item">
<a href="/item/?id={id}">
<xsl:value-of select="name"/>
</a><br/>
</xsl:template>
* This source code was highlighted with Source Code Highlighter.
Разница совсем не велика. Дело вкуса и стиля программирования. Давайте посмотрим, как шаблон будет использоваться в дальнейшем.
+58
Облако тегов средствами XSLT
7 мин
2.9KНе так давно столкнулся с необходимостью реализовать на одном из проектов то, что в народе называют «облаком тегов» — набор ссылок, в котором наиболее «весомые» элементы имеют бОльший размер. Для этого можно было бы, конечно, посчитать и получить все необходимые данные в PHP, на котором работает проект, но мне хотелось сделать конечный вариант отображения на XSLT и CSS, чтобы все необходимые величины для конфигурирования максимальных/минимальных размеров шрифта, например, были заданы в представлении, а не в логике приложения.
Возможно, кому-то мой опыт окажется полезным, поэтому публикую конечное решение здесь.
Итак, на входе у нас есть простейший XML с тегом и количеством его упоминаний:
Возможно, кому-то мой опыт окажется полезным, поэтому публикую конечное решение здесь.
Итак, на входе у нас есть простейший XML с тегом и количеством его упоминаний:
+22
Решение проблем обработки XSLT на стороне клиента (часть 2)
5 мин
8.3KВ прошлой статье я описал как реализовать инклудинг и кеширование при обработке xsl-темплейтов на стороне клиента. Сегодня я раскажу с помощью каких инструментов можно проводить отладку xslt-преобразований на стороне клиента и о работе конструкции <xsl:value-of select=«xxx» disable-output-escaping=«yes»/> в firefox.
Во время обработки xsl-документов в браузере могут происходить различные ошибки:
1) сетевые ошибки — когда xml или xsl данные не были получены;
2) ошибки обработки шаблонов.
Отладка XSLT на клиенте
Во время обработки xsl-документов в браузере могут происходить различные ошибки:
1) сетевые ошибки — когда xml или xsl данные не были получены;
2) ошибки обработки шаблонов.
+5
Ближайшие события
Firebird Conf: конференция для разработчиков и администраторов СУБД Firebird
6 июня
09:00 – 20:00
Москва
XPath наглядно
1 мин
60K XPath является одним из ключевых моментов на дороге к пониманию XSLT. И на первых порах хочется получить какой-нибудь простой способ поэкспериментировать с ним, чтобы в деталях разобраться, как он работает. Способа такого, впрочем, не наблюдается. Приходится или качать совсем не бесплатные XML/XSLT редакторы, или довольствоваться статичными картинками с zvon.org. Может быть, я плохо искал. Но с моей колокольни все обстоит именно так. И когда передо мной в очередной раз встала задача «Объяснить XSLT», в голове и родилась идея крохотного сервиса. После того, как все заработало, было решено выкатить его для всеобщего пользования: наверняка не я один сталкивался с похожими проблемами.
+86
Решение проблем обработки XSLT на стороне клиента
3 мин
6.8KВы уже используете XSLT в качестве шаблонизатора на сервере. Настал черёд перенести xsl-трансформацию на клиента. Можно, например, воспользоваться способом описанным в статье На клиенте! Получить XML! Получить XSL! Сделать XHTML! Марш!. Но это было бы слишком просто, потому что каждый браузер добавляет несколько своих нюансов при работе с XSLT.
Вопросы о способе загрузки xsl- и xml-файлов и их обработки в различных браузерах был рассмотрен в указанной выше статье. Рассмотрим другие вопросы:
1) инклудинг;
2) кеширование;
Все примеры опубликованы на этой странице ra-project.net/xsl_tests и работают в браузерах Opera, Chrome, IE6, Firefox, Safari.
Вопросы о способе загрузки xsl- и xml-файлов и их обработки в различных браузерах был рассмотрен в указанной выше статье. Рассмотрим другие вопросы:
1) инклудинг;
2) кеширование;
Все примеры опубликованы на этой странице ra-project.net/xsl_tests и работают в браузерах Opera, Chrome, IE6, Firefox, Safari.
+27
Преобразование даты в международный формат(UTC). Шаблон для версий XSLT от 1.0
17 мин
15KПотребовалось переводить дату в xml файлах из московского времени в международное. Изначально проблема решалась вставкой Java скрипа, но потребовалось сделать используя только встроенные возможности XSLT 1.0.
Сразу предупреждаю комментирующих, версия XSLT 2.0, где есть тип данных Дата, не годится, требуется реализация именно в 1.0.
Скачать пример, шаблон, результат и парсер можно здесь.
Итак, шаги решения задачи:
Подзадачи:
Исходный шаблон даты:
DD.MM.YYYY hh:mm:ss
Подправить XSL под ваш формат можно без проблем, достаточно изменить последовательность разрезания и указать разделители.
Формат UTC даты:
YYYY-MM-DD hh:mm:ss
Подправляется еще проще, при сборе конечной строки.
Если требуется другие значения смещения часового пояса, достаточно исправить их в функции MoscowOffsetTime.
Использование шаблона:
Сразу предупреждаю комментирующих, версия XSLT 2.0, где есть тип данных Дата, не годится, требуется реализация именно в 1.0.
Скачать пример, шаблон, результат и парсер можно здесь.
Итак, шаги решения задачи:
- Разбиение исходной даты в нашем формате на составляющие.
- Определение смещения часового пояса относительно UTC учитывая переход на зимнее/летнее время, для москва летом смещение -4, зимой -3. Переход на летнее время происходит в два часа ночи последнего воскресенья марта, переход на зимнее время в три часа ночи последнего воскресенья октября.
- Перевод всех частей даты в UTC время
- Сбор даты в UTC формате.
Подзадачи:
- Поиск дня недели, используется формула Зеллера
- Поиск количества дней в месяце
- Проверка года на високосность
Исходный шаблон даты:
DD.MM.YYYY hh:mm:ss
Подправить XSL под ваш формат можно без проблем, достаточно изменить последовательность разрезания и указать разделители.
Формат UTC даты:
YYYY-MM-DD hh:mm:ss
Подправляется еще проще, при сборе конечной строки.
Если требуется другие значения смещения часового пояса, достаточно исправить их в функции MoscowOffsetTime.
Использование шаблона:
<xsl:call-template name="GetTime">
<xsl:with-param name="time" select="10.15.2010 14:10:17"></xsl:with-param>
</xsl:call-template>
* This source code was highlighted with Source Code Highlighter.
+16
Другая книга про XSLT
2 мин
6.6KВашему вниманию предлагается небольшая по объему книга (можно называть это брошюрой), посвященная XSLT и его использованию в качестве языка шаблонизатора при создании сайтов на UMI.CMS.
Это не реклама «еще одной cms», и «еще одного шаблонизатора», а лишь предложение познакомиться с одним из подходов к использованию технологии XSLT при создании сайтов, где в качестве системы управлением контента взята UMI.CMS.
Это не реклама «еще одной cms», и «еще одного шаблонизатора», а лишь предложение познакомиться с одним из подходов к использованию технологии XSLT при создании сайтов, где в качестве системы управлением контента взята UMI.CMS.
+37
Timestamp из даты-времени с помощью XSLT
13 мин
9.6KВ жизни так случается, что не смотря на всю любовь к дифференциации данных и представления наступает день, когда возникает необходимость перенести часть логики в XSLT шаблон.
В моем случае ничего криминального на горизонте не предвиделось: требовалось провести расчет времени между двумя событиями в иерархическом XML логе. Дата и время хранились в формате частично совместимом с RFC 3339.
Эта совместимость обеспечивалась корректной нотацией даты
В моем случае ничего криминального на горизонте не предвиделось: требовалось провести расчет времени между двумя событиями в иерархическом XML логе. Дата и время хранились в формате частично совместимом с RFC 3339.
Эта совместимость обеспечивалась корректной нотацией даты
yyyy-MM-dd
и времени hh:mm:ss.SS
, но имели место следующие отступления от стандарта:- Дата и время разделялись пробелом, а не буквой
T
; - Число цифр, обозначающих миллисекунды могло варьироваться от «ниодной» до «много-много»;
- Часовой пояс не указывался вообще.
date:difference
, но от него пришлось отказаться. Дело в том, что разницу требовалось получать с точностью до миллисекунд, а этот алгоритм возвращал валидный xsd:duration
(ISO 8601), который миллисекунд не содержит. К тому же парсить чужой output, хоть и формализованный – дело не очень благодарное. Таким образом, покопавшись немного в exslt, я решил написать парсер сам, в надежде, что смогу сделать это быстро…+7
Почти год как закрыт xmlhack.ru
1 мин
804«Сайт xmlhack.ru закрыт
Всё проходит в этом мире.
Когда-то XML был в новинку. Потом он стал модной технологией. Теперь это просто винтик в машине IT. Примерно как ASCII.
Когда-то в группе fido7.ru.xml не было сообщений. Потом она стала очень активной. Теперь там снова пусто, уж год как.
Я присоединяюсь к этому движению. Сайт xmlhack.ru выполнил свою миссию, и теперь уходит на отдых.
Материалы сайта остаются на своих местах. Форум архивируется и превращается в набор статических страниц.
Спасибо всем, кто помогал!
olpa „
В изучении xslt и решении нетривиальных задач мне помог этот ресурс. Очень жаль, что этот сайт закрылся (как оказалось уже почти год). Я уверен, что olpa многим помог решить свои задачи. Неужели xslt уже никому не интересен?
Всё проходит в этом мире.
Когда-то XML был в новинку. Потом он стал модной технологией. Теперь это просто винтик в машине IT. Примерно как ASCII.
Когда-то в группе fido7.ru.xml не было сообщений. Потом она стала очень активной. Теперь там снова пусто, уж год как.
Я присоединяюсь к этому движению. Сайт xmlhack.ru выполнил свою миссию, и теперь уходит на отдых.
Материалы сайта остаются на своих местах. Форум архивируется и превращается в набор статических страниц.
Спасибо всем, кто помогал!
olpa „
В изучении xslt и решении нетривиальных задач мне помог этот ресурс. Очень жаль, что этот сайт закрылся (как оказалось уже почти год). Я уверен, что olpa многим помог решить свои задачи. Неужели xslt уже никому не интересен?
+2
Кроссбраузерные HTML инклуды \(^_^)/
7 мин
6.5KПусть у нас есть простенький хтмльчик index1.htm
Как известно, хтмл поддерживает инклуды только через iframe/object, но с ними не очень удобно работать из яваскрипта.
Можно, конечно, прописать в каждую подключаемую страницу скрипт типа такого
Он переносит своё содержимое в родительский документ и удаляет фрейм. Но в случае отключённоо яваскрипта мы получим окошко ифрейма не подстраивающееся под размер содержимого.
<!DOCTYPE html><br><html><br> <head><br> <title>Xbrowser HTML includes</title><br> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><br> </head><br> <body><br> <h1>First file</h1><br> </body><br></html>
Как известно, хтмл поддерживает инклуды только через iframe/object, но с ними не очень удобно работать из яваскрипта.
Можно, конечно, прописать в каждую подключаемую страницу скрипт типа такого
new function(){<br> var frame= window.frameElement<br> if( !frame ) return<br> var parent= frame.parentNode<br> var body= document.getElementsByTagName( 'body' )[0]<br> var child;<br> while( child= body.firstChild ) parent.insertBefore( child, frame )<br> parent.removeChild( frame )<br>}
Он переносит своё содержимое в родительский документ и удаляет фрейм. Но в случае отключённоо яваскрипта мы получим окошко ифрейма не подстраивающееся под размер содержимого.
+38