Меню

Контакты

+ 996 312 46 07 70
(прямой)
+ 996 555 55 03 11
Мы рады вашему звонку!

Авторизация




Статьи
Фрэймы и окна
Почему document.write() открывает новое окно вместо того, чтобы писать в текущем окне?
Это наиболее популярное непонимание среди JavaScript программистов.
Как только текущий документ завершил загрузку, вы абсолютно не можете использовать document.write() для изменения содержимого. Поведение document.write() по умолчанию, как только текущий документ выполнил загрузку, должно открыть новое окно типа text/ Html, и направить ваш вывод в то окно.
Запомните, что единственная возможность для вас изменить отображение только что загруженного объекта документа - это:
  • Содержание элементов формы
  • Характеристики документа, которые выставляются через модель объекта документа (как bgcolor)
  • Экран, в котором выполняются апплеты или плагины, и,
  • Слои, которые имеют собственный объект документа и могут, таким образом, быть восстановлены независимо от объекта документа вашего скрипта.
Пример использования innerHTML
 
Как я могу загрузить фрейм без дополнительных файлов?
Как я загружаю пустой фрейм? Это выполняется использованием переменной, а затем использованием JavaScript: URL для загрузки фрейма, затем ссылка на эту переменную через атрибут src тага фрейма.
< Script language=JavaScript>
var emptyFrame = "<html><body>some <B>HTML</B> text</body></html>";
// or
// var emptyFrame = "<html></html>";
</script>
...
<iframe src="javascript:parent.emptyFrame"></iframe>

 

Как я могу ссылаться на функции в другом фрейме?

Лучше всего определять функции внутри одиночного документа, родительского frameset-документа, обозначая HTML документ, который определяет frameset(s). Затем функция может быть вызвана, используя следующее выражение

parent.frameName.function();


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

windowReference.function()
 
Как я могу изменить два фрейма одновременно одним щелчком?

Сделать функцию:

function newPages() {
parent.frameA.document.location.href=" HTTP://.....";
parent.frameB.document.location.href="http://.....";
}


Затем вы вызываете эту функцию через любой объект, который поддерживает событие onClick:

<a href="JavaScript:newPages()">Continue to the new pages</a>

 

Замечание: Если одна из страниц, которую вы желаете изменить имеет в себе эту функцию, вы должны поместить setTimeout() в команде, которая изменяет локальную страницу:

function newPages() {
parent.frameA.document.location.href="http://.....";
setTimeout('self.location.href="http://....."', 250);
}

 

Таким образом, все ваши другие обращения выполняются прежде, чем вы закроете эту страницу. Естественно, ваши специфические потребности будут отличаться, а это - только предложение.

 

Как может код в одном фрейме определить, закончил ли загрузку код в других фреймах в моем frameset'е?

Часто, при работе с много-фрэймовыми документами, необходимо иметь доступ к данным в объектах, принадлежащих фреймам "брата". Думается, что в течение инициализации frameset'а, пока дочерние фреймы загружаются, фрейм A запрашивает данные из фрейма B только, чтобы узнать, что фрейм B не закончил загрузку или выполнение кода. Эта проблема синхронизации часто приводит к ошибкам, подобным " Object has no property indexed by zero" или "parent.frameB.variableName is undefined".

Чтобы решить это, можно выполнить onLoad обработчики в frameset так, чтобы любой требуемый перекрестно-граничный код выполнялся только после того, как подготовлен весь набор документов:
frameset.html:
<frameset rows="50%,50%" onLoad="alert('Done the frameset')">
<frame name="frameA" src="frameA.html">
<frame name="frameB" src="frameB.html">
</frameset>

 

frameA.html:

<body bgcolor="white" onLoad="alert('Done A')"> </body>

 

frameB.html:

<body bgcolor="white" onLoad="alert('Done B')"> </body>

Если все идет хорошо, вы увидите сообщение из фрейма A, затем B, затем из frameset, так как событие frameset onLoad обрабатывает файлы после того как все фрэймы загрузятся.

OnLoad замечание:Некоторые Netscape клиенты по ошибке вызывают функцию frameset onLoad перед каждой дочерней функцией документа onLoad.

 

Почему мой вызов window.open() не отображает тип окна и размер, который я определяю?
Важно заметить, что третий параметр для функции window.open() может не содержать whitespace:
myWindow = window.open("http://www.netscape.com/", "myWindowName",
" Toolbar=yes, location=yes, directories=no, status=yes, menubar=yes,
scrollbars=yes, resizable=yes, height=400, width=600");

 

Как я могу создать модальное окно (которое не может быть минимизировано) используя JavaScript?
<BODY onBlur="self.focus();">

 

Могу ли я написать JavaScript, который выполнится, когда пользователь закроет окно?

Вы можете использовать обработчик события onUnLoad объекта окна.

 

Как я могу управлять размещением нового окна, используя window.open()?
windowReference = window.open("document.html", "windowName",
"screenX=20,screenY=30")

 

Как я могу закрыть окно без появления подсказки предупреждения?

Сообщение "close window" не будет появляться если:

  • Окно, которое вы пытаетесь программно закрыть было программно открыто вашим скриптом или документом вашего скрипта или
  • Окно, которое вы пытаетесь закрыть - первый документ, загруженный в этом окне (например, оно было создано связью с предварительно неиспользованным target, или все документы были загружены в окне, используя location.replace()).

 

У меня есть всплывающее окно для меню. Как я могу при выборе из этого меню открыть документы в полноэкранном окне?
В заголовке начального HTML документа поместите предложение window.name.
window.name="a_Name"


Затем в окне откройте предложения в меню, используйте то же самое имя.

varName = open("whatever.htm","a_Name",""); 
 
Могу ли я многократно использовать одно и то же всплывающее окно на различных страницах?

Да, используйте то же самое имя каждый раз в открытом окне. Размер окна должен быть тот же самый. varName = open("whatever.htm","same_Name","");
Когда вы хотите закрыть всплывающее окно, просто откройте его перед закрытием.

varName = open("whatever.htm","same_Name",""); 
varName.close() 
 
Как открыть страницу в полноэкранном режиме, как при нажатии клавиши F11?

Работает только в IE, в остальных браузерах просто максимизирует страницу. var myWin = window.open("index.html", "", "fullscreen");

 
Как обратиться к скрипту(объекту) в другом фреме или окне?

Пусть, например, ваше окно разбито на два фрейма: левый и правый. Пусть левый фрейм вы назвали LEFT, а правый - RIGHT. Предположим, скрипт у вас работает в левом фрейме, а в правом имеется форма ANKETA, а в ней - поле TIME. И вот вам очень хочется, чтобы значение поля TIME стало равно D. Обращаемся из левого фрейма в правый:

 WINDOW.TOP.RIGHT.ANKETA.TIME.VALUE=D

 

Соответственно, из правого фрейма в левый мы придем так:

 WINDOW.TOP.LEFT.FORMNAME.ELEMENT.NAME

 

Если вы захотите приказать из левого фрейма загрузить новый документ в правый фрейм, путь будет несколько иной:

 WINDOW.TOP.RIGHT.DOCUMENT.OPEN()

 

Вот, например, функция, которая, выполняясь в левом фрейме, загружает в правый фрейм страницу с анкетой и заранее устанавливает курсор ввода в поле NAME:

FUNCTION LOADPAGE()
{
WINDOW.TOP.RIGHT.DOCUMENT.OPEN("ANKETA.HTM");
// Загружаем страницу
WINDOW.TOP.RIGHT.ANKETA.NAME.FOCUS();
// Помещаем курсор в поле NAME
}

 

Перейдем к адресации между окнами. Основная страница с внутренним именем CENTER содержит левый фрейм с основным меню (название MENU) и правый, куда загружаются текущие документы (название MAIN). Посетитель щелкнул на ссылке в правом фрейме, в результате была выполнена команда

W=WINDOW.OPEN("WIZARD.HTM", "WIZARD", "WIDTH=400,HEIGHT=344,RESIZABLE=YES");

 

Было создано окно с внутренним именем WIZARD, и в нем запустился мастер выбора курса. Вся эта троица может наперекрест обмениваться информацией, устанавливать друг у друга значения полей - в общем, общаться. Например, путь из окна мастера в правый фрейм такой:

WINDOW.CENTER.MAIN... // Далее могут
   следовать названия формы и элемента

 

 

Новости антивируса Dr. Web


Наши партнёры