Web-инжиниринг

       

Wcontrol


Управление окнами

Что можно сделать с окном? - Открыть(создать), закрыть(удалить), положить его поверх всех других открытых окон(передать фокус). Кроме того, можно управлять свойствами окна и свойствами подчиненных ему объектов. Описанию основных свойств посвящены все странички раздела "Программируем свойства окна браузера", поэтому сосредоточимся на простых и наиболее популярных методах окна:

  • alert()
  • confirm()
  • prompt()
  • open()
  • close()
  • focus()
  • setTimeout()
  • clearTimeout()
  • Здесь не указаны только два метода: 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создает окно, размер которого можно будет изменять после создания
    replace - позволяет при открытии окна управлять записью в массив history

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


    начало страницы


    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(). При этом, чтобы не порождалось множество потоков, проверяется значение указателя на объект потока.

    Содержание раздела