class DarkRaha extends com { // разработка приложений
            String a="Главная" b="Контакты" c="О сайте"
};

HTML

DOM HTML

введение
объектной модель DHTML
события
свойства и методы
объект window
объект navigator
объект screen
объект history
объект location
объект document
объект event
объект Canvas

разное

генерация кода
фреймы
вставка текста в позицию каретки
скрыть/показать текст
ширина ячеек таблицы

Справочник по DHTML

Работа с фреймами

Иногда желательно, чтобы страница определяла, загружена ли она во фрейме или нет. И если нет, делала бы перезагрузку документа во фрейме.

Рассмотрим случай для окна с двумя фреймами, где первый фрейм определяет содержание, а второй конкретную информацию. Общая схема такова. Загружаемая страница проверяет, находится ли она во фрейме. Если нет, открывает за место себя стартовую страницу с указанием себя в строке поиска. В данном примере строка поиска также может содержать адрес страницы загружаемой в другой фрейм (оба адреса разделены символом +). Стартовая страница содержит определения фреймов. После загрузки ее скрипт разбирает строку поиска и устанавливает фреймам искомые страницы. Если страницы не указаны, она назначает им страницы по умолчанию.

Ниже приведен код страницы (назовем start.htm) с определением фреймов.


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN"> 
<html> 
<head>
<!-- 
Данный скрипт выделяет из строки адреса строку поиска 
(все что идет после символа ?).
Если она есть, то она должна содержать либо адрес страницы
для второго фрейма (он у нас информативный),
либо адреса для обоих фреймов разделенных символом +.
Если строка поиска не задана, фреймам назначаются страницы 
по умолчанию.
-->
<script language="JavaScript">
<!--
function loadSearch() {
// берем часть url идущую после знака ?
var s=location.search; 
// сюда сохраним
var src1,src2; 

// исключаем из строки знак ?
s=s.substr(1);

// если есть данные после ?
if(s!=null && s != "" && s!="undefined") {

 // если в строке определены страницы для обоих фреймов
 if(s.indexOf("+")!=-1) {
   src1 = s.substr(0,s.indexOf("+")); // для фрейма FrameInfo
   src2 = s.substr(src1.length+1);    // для фрейма FrameIndex
 }
 else // только для второго фрейма 
   src1 = s;
}

// задаем страницы для фреймов по умолчанию
if(src2==null || src2=="" || src2=="undefined")
    src2="index.htm";
 
if(src1==null || src1=="" || src1=="undefined")
    src1="info.htm";    

// устанавливаем страницы фреймов
frames[0].location.href=src2;
frames[1].location.href=src1;    
}
-->
</script>
</head>

<!-- устанавливаем нашу функцию как обработчик 
события загрузки документа  
-->
<frameset id="mainset" cols="20%,80%" onload="loadSearch();">  
 
  <!-- в большинстве браузеров onload выполняется 
       после загрузки документа. Поэтому в определении
       фреймов не будем указывать страницы, чтобы не
       загружать их лишний раз.
  -->       
  <frame src="" name="FrameIndex" title="Оглавление">  
  <frame src="" name="FrameInfo" title="Информация"> 
</frameset>

</html>

Для удобства вынесем код JavaScript, используемый всеми страницами отображаемых во втором фрейме, в отдельный файл lib0.js. Ниже приведен избранный код страницы, отображаемой во втором фрейме.


...
<!-- подгружаем скрипты -->
<script type="text/javascript" src="lib0.js"></script>
...
<!-- обработчик на загрузку документа -->
<body onload="loadInfo('anyindex1.htm');">
...
И наконец, код файла lib0.js

/* 
Проверка нахождения странице во фрейме FrameInfo.
Если нет загружаем стартовую страницу start.htm и добавляем
текущую страницу в строку поиска.
Если указан аргумент, то его добавляем тоже в строку поиска
в качестве страницы для второго фрейма, т.е. FrameIndex.
*/
function checkFrameInfo() {
var s;
if(self.name!="FrameInfo") {   
  s="start.htm"+"?"+
  location.href.substr(location.href.lastIndexOf("/")+1);
  if(arguments[0]!=null && arguments[0]!="undefine")
      { s=s+"+"+arguments[0];}
  location=s;  
  }
}

function loadInfo(){
...
checkFrameInfo(arguments[0]);
...
}

Примером такого использования строки поиска может служить документация по Java на сайте Sun Microsystems. Когда пользователь просматривает информацию о классе А вне фреймов, а потом нажмет ссылку показать во фрейме, то в главном фрейме нового окна будет тоже отображаться информация о классе А.


Рейтинг@Mail.ru