Wcontrol
Управление окнами
Что можно сделать с окном? - Открыть(создать), закрыть(удалить), положить его поверх всех других открытых окон(передать фокус). Кроме того, можно управлять свойствами окна и свойствами подчиненных ему объектов. Описанию основных свойств посвящены все странички раздела "Программируем свойства окна браузера", поэтому сосредоточимся на простых и наиболее популярных методах окна:
Здесь не указаны только два метода: scroll() и blur().
Первый позволяет продернуть окно на определенную позицию. Но его очень сложно использовать, не зная координат окна. Последнее является обычным делом, если только не используется технология программирования слоев или pcss.
Второй метод уводит фокус с окна. При этом совершенно не понятно, куда этот фокус будет передан. Гораздо проще целенаправленно передать фоку, чем его просто потерять.
window.alert()
Метод alert() позволяет выдать окно предупреждения:
<a href="javascript:window.alert('Кара-у-у-ул!!!')">Во дворе злая собака</a>
Во дворе злая собака
Все очень просто, но нужно иметь в виду две вещи: во-первых, сообщения выводятся системным фонтом, следовательно, для предупреждений на русском языке нужна локализованная версия ОС, и, во-вторых, как это вообще принято в JavaScript, нельзя выдавать сообщения с буквой "я". Такие сообщения приводят к перманентной ошибке браузера.
начало страницы
window.confirm
Метод confirm() позволяет задать пользователю вопрос, на который тот может ответить либо положительно, либо отрицательно:
<form>
<input type=button value="Что вы знаете о JavaScript?"
onClick="
if(window.confirm('Знаю все')==true)
{ document.forms[0].elements[1].value='Проверка на вшивость';}
else
{document.forms[0].elements[1].value='Знал бы - не читал';};"><br>
<input size=30>
</form>
Все ограничения для сообщений на русском языке, которые были описаны для метода alert() справедливы и для метода confirm().
начало страницы
window.prompt
Метод prompt() позволяет принять от пользователя короткую строку текста, которую он набирает в поле ввода информационного окна:
<form>
<input type=button value="Открыть окно ввода"
onClick=
"document.forms[1].elements[1].value=window.prompt('Введите чего-нибудь Христа ради!');">
<input size=30>
</form>
Введенную пользователем строчку можно присвоить любой переменной и потом ее разбирать в JavaScript-программе.
начало страницы
window.open
У этого метода окна атрибутов больше, чем у некоторых объектов. Метод предназначен для создания новых окон. В общем случае его синтаксис выглядит следующим образом:
open("URL","window_name","param,param,...",replace);
где -
URL - страница, которая будет загружена в новое окно,
window_name - имя окна, которое можно использовать в атрибуте target в контейнерах A и FORM,
params - список параметров:
width | ширина окна в пикселях |
height | высота окна в пикселях |
toolbar | создает окно с системными кнопками браузера |
location | создает окно с полем location |
directories | создает окно с меню предпочтений пользователя |
status | создает окно с полем статуса status |
menubar | создает окно с меню |
scrollbar | создает окно с линейками прокрутки |
resizable | создает окно, размер которого можно будет изменять после создания |
Если вы не поленитесь и проверите все гипертекстовые ссылки в таблице параметров, то получите представление о работе каждого из них.
начало страницы
window.close
Метод close() - это оборотная сторона медали метода open(). Он позволяет закрыть окно. Наиболее часто встает вопрос о том, а которое из окон собственно следует закрыть. Если необходимо закрыть текущее окно, то:
window.close();
self.close();
Если необходимо закрыть родительское окно, т.е. окно, из которого было открыто текущее окно, то:
window.opener.close();
Если необходимо закрыть произвольное окно, то тогда сначала нужно получить его идентификатор,:
id=window.open();
...
id.close();
Как видно из последнего примера, закрывают окно не по имени(значение атрибута target тут совершенно не уместно), а используют указатель на объект.
начало страницы
windows.focus
Метод focus() применяется для передачи фокуса в окно, с которым он использован. Передача фокуса полезна как при открытии окна, так и при его закрытии, не говоря уже о случаях, когда нужно выбирать окна. Рассмотрим пример.
В нем откроем окно и, не закрывая его, снова откроем окно с таким же именем, но с другим текстом. Новое окно не появилось по верх основного окна, т.к. фокус ему не был передан. Теперь повторим открытие окна, но теперь с передачей фокуса:
function myfocus(a)
{
id = window.open("","example","scrollbars,width=300,height=200");
if(a==1)
{
id.document.open();
id.document.write("<center>Открыли окно в первый раз");
}
if(a==2)
{
id.document.open();
id.document.write("<center>Открыли окно во второй раз");
}
if(a==3)
{
id.focus();
id.document.open();
id.document.write("<center>Открыли окно во второй раз");
}
id.document.write("<form><input type=button onClick='window.close();' value='Закрыть окно'></center>");
id.document.close();
}
Поскольку мы пишем содержание нового окна из окна старого(родителя), то в качестве указателя на объект используем значение переменной id.
начало страницы
window.setTimeout
Метод setTimeout() используется для порождения нового потока вычислений, исполнение которого откладывается на время(ms), указанное вторым аргументом:
idt = setTimeout("JavaScript_код",Time);
Типовое применение этой функции - организация автоматического изменения свойств объектов. Например, можно запустить часы в поле формы:
Текущее время:
var flag=0;
var idp=null;
function myclock()
{
if(flag==1)
{
d = new Date();
window.document.c.f.value = d.getHours()+":"+d.getMinutes()+":"+d.getSeconds();
}
idp=setTimeout("myclock();",500);
}
function flagss()
{
if(flag==0) flag=1; else flag=0;
}
...
<form name=c>
Текущее время:<input name=f size=8><input type=button value="Start/Stop" onClick=flagss()>
</form>
Обратите внимание на то, что поток порождается в данном случае всегда, даже в том случае, когда часы стоят. Если бы его порождали только при значении переменной flag равном единице, то при значении 0 он исчез бы навсегда, и при нажатии на кнопку часы продолжали бы стоять.
начало страницы
window.clearTimeout()
Метод clearTimeout() позволяет уничтожить поток, порожденный методом setTimeout(). Очевидно, что его применение позволяет более рачительно использовать ресурсы вычислительной установки. Для того чтобы использовать этот метод в примере с часами, нам нужно модифицировать функции и форму:
Текущее время:
var idp1 = null;
function start()
{
d = new Date();
window.document.c1.f1.value = d.getHours()+":"+d.getMinutes()+":"+d.getSeconds();
idp1=setTimeout("start();",500);
}
function stop()
{
clearTimeout(idp1);idp1=null;
}
...
<form name=c1>
Текущее время:<input name=f1 size=8>
<input type=button value="Start" onClick="if(idp1==null)start();">
<input type=button value="Stop" onClick="if(idp1!=null)stop();">
</form>
В данном примере для остановки часов используется метод clearTimeout(). При этом, чтобы не порождалось множество потоков, проверяется значение указателя на объект потока.