Статья написана специально для "Свой сайт - это очень просто" вольным ВЕБ-мастером Александром Недовизий из Львова.

"Боремся" с фреймами.

Здравствуйте, господа. Извините, коль чего не так. Я же не автор рассылки, всего лишь волонтёр, пишущий для Вас эту статейку. А трюк, о котором я хотел бы Вам рассказать, прост.

Итак, у Вас есть некая фреймовая структура в документе lepota.html. Например, такая:

<HTML>
<HEAD>
<TITLE>LEPOTA</TITLE>
<FRAMESET COLS="..." ...>
  <FRAME NAME="toc" SRC="table_of_contents.html">
  <FRAME NAME="info-area" SRC="first-page.html>
</FRAMESET>
</HEAD>
<BODY>&nbsp;</BODY>
</HTML>

"Toc" - это содержание (или навигатор по сайту - там список, чего у нас есть). "Info-area" - это место, куда подгружаются части сайта - разные файлы. Та же первая страничка - по умолчанию. Однако, возможен вариант, когда пользователь вызовет не сам документ, который содержит фреймовую структуру, а какой-то из информационных документов (т.е., не lepota.html, a first-page.html или тот же table_of_contents.html). И что? Вся наша фреймовая красота отправляется...

Одно из решений - в каждый документ, который является частью фреймовой структуры, вставить несложный JavaScript, который будет проверять, не загружена ли страничка вне фрейма, и, если это так, подгружать всю фреймовую структуру. Неудобно, но работает. Когда-то я именно из-за таких "штучек" отказался от фреймов и почти на 98% перешёл на таблицы. Но это не сама суть. Вот этот JavaScript:

<SCRIPT LANGUAGE="JavaScript">
<!--
function check4frameset() {
  if ( top.location == this.location )
  {
    alert('Sorry, FRAMESET not loaded!\nYou're being redirected...');
    top.location = "document-with-frameset-structure.html";
  }
}
//-->
</SCRIPT> 

Это - сама функция. А как приляпать её к документу? Да очень просто! Надо всего лишь дописать вызов данной функции в тэг <BODY> следующим образом:

<BODY ... onLoad="check4frameset()" ...>

Теперь общий вид любого документа, подгружаемого во фреймы, будет:

<HTML>
<HEAD>
<TITLE>Document 01</TITLE>
<META ...>
<SCRIPT LANGUAGE="JavaScript">
<!--
function check4frameset()
{
  if ( top.location == this.location )
  {
    alert('Sorry, FRAMESET not loaded!\nYou're being redirected...');
    top.location = "document-with-frameset-structure.html";
  }
}
//-->
</SCRIPT>
</HEAD>
<BODY onLoad="check4frameset()" ...>...</BODY>
</HTML> 

Изменения выделены жирным шрифтом. И всё! Рулезззно работает. "Приём" будет работать в 90..97% случаев, ввиду того, что некоторые пользователи отключают JavaScript. Для этих ОУП (особо умных пользователей) можно придумать ещё чё-нить.

Теперь о том, что Вам надо будет менять под себя. Во-первых - сам адрес редиректа (т.е., я придумал, что редиректится всё будет на документ document-with-frameset-structure.html, который у меня псевдо-содержит фреймовую структуру. У Вас этот документ называется по-другому. Второе. Сообщение в алерт-окошке. "\n" означает перевод строки. Для тех, кто знаком с языком программирования С/С++ ржавый скрип (JavaScript) позволяет использовать много таких С-подобных конструкций. Для других - если интересно, спросите у меня, я напишу ещё чё-нить в том же роде.

Что менять не надо. Собссно, ничего особенного. Но переименовав саму функцию, не забудьте поменять вызов её в тэге <BODY>. Вот и всё!

С уважением! Для Вас старался Chinga;
заходите, пишите в ICQ ( UIN # 148113067).

на главную


TopList


Copyright © 2001 by Сергей Червонящий.
Все права защищены. Запрещено частичное или полное воспроизведение материалов сайта без согласования с автором.
Hosted by uCoz