Обмен параметров между окнами

Довольно часто возникает задача передачи некоторых параметров от открывающего окна открываемому окну и/или передача параметров из открываемого окна открывшему его окну.

В Web-браузерах можно использовать два способа такого обмена:

· с помощью метода showModalDialog() объекта window (не работает в Opera);

· с помощью свойства opener объекта window (этот способ работает во всех Web-браузерах).

Метод

showModalDialog(URL, аргументы, опции)

открывает модальное диалоговое окно (модальным называется окно, до закрытия которого нельзя продолжить работу на компьютере). Функция возвращает значение, заданное в диалоговом окне в свойстве returnValue объекта window.

Параметр URL задает адрес загружаемого диалогового окна. В необязательном параметре аргументы задаются данные, передаваемые диалоговому окну. Параметр аргументы, заданный при вызове диалогового окна, доступен в диалоговом окне в свойстве dialogArguments объекта window. Необязательный параметр опции задает строку списка характеристик диалогового окна (отдельные характеристики списка отделяются друг от друга символом ";").

Для диалогового окна могут быть заданы следующие характеристики:

· dialogwidth: ширина – задает ширину диалогового окна (в абсолютных или относительных единицах);

· dialogheight: высота – задает высоту диалогового окна (в абсолютных или относительных единицах);

· dialogleft: расстояние – задает расстояние от левого края экрана до левого края диалогового окна (в абсолютных или относительных единицах);

· dialogtop: расстояние – задает расстояние от верхнего края экрана до верхнего края диалогового окна (в абсолютных или относительных единицах);

· center:yes или center:no – включает или отключает вывод диалогового окна в центре экрана (по умолчанию yes);

· scroll:yes или scroll:no – включает или отключает отображение полос прокрутки диалогового окна (по умолчанию no);

· resizable:yes или resizable:no – включает или отключает возможность изменения размера диалогового окна (по умолчанию no).

Пример 4.5.55. Использование диалогового окна:

Тело документа HTML содержит следующую кнопку:

<input type="button" value="Выполнить тест"

onclick="openTest()">

Функция openTest() задает параметры для диалогового окна, открывает диалоговое окно, а затем выполняет обработку результата, полученного от диалогового окна:

function openTest()

{

// Задание массива параметров теста

var testParms = new Array();

// Задание вопроса теста

testParms[0] = 'Какие атрибуты элемента &lt;a&gt;' +

' задают метку ("якорь") для элемента HTML?';

// Задание вариантов ответа теста

testParms[1] = "id";

testParms[2] = "href";

testParms[3] = "name";

// Вызов диалогового окна

var answer = window.showModalDialog('testBox.html',

testParms,

"dialogwidth: 500px; dialogheight: 250px; scroll: no");

//Если ответ правильный

if(answer == "truefalsetrue")

// Вывод сообщения о правильном ответе

document.write("<p style='color:green'>" +

"Правильный ответ</p>");

else

// Вывод сообщения о неправильном ответе

document.write("<p style='color:red'>" +

"Ответ неправильный</p>");

// Закрытие документа

document.close();

}

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

<script type="text/javascript">

// Получение строкового представления параметров

testString = new String(window.dialogArguments);

// Преобразование строки в массив

testParms = testString.split(",");

// Вывод вопроса теста

document.write("<h4>" + testParms[0] + "</h4><form>");

// Вывод вариантов ответа в цикле

for(i = 1; i < testParms.length; i++)

// Вывод текущего варианта ответа

document.write("<p><input type='checkbox' id='id" + i +

"' value='" + testParms[i] + "'/><label for='id" +

i + "'>" + testParms[i] + "</label></p>");

// Вывод конечного тега формы

document.write("</form>");

</script>

<input type="button" value="Проверка"

onclick="testClose()">

Функция формирует строку результата для передачи вызывающему окну и закрывает диалоговое окно:

function testClose()

{

// Начальное значение возвращаемой строки

testResult = "";

// Получение состояния переключателей в цикле

for(i = 1; i < testParms.length; i++)

{

// Получение состояния текущего переключателя

testResult += document.getElementById("id" +

i).checked

}

// Получение возвращаемого значения

window.returnValue = testResult;

// Закрытие окна

window.close();

}

После нажатия кнопки Выполнить тест открывается диалоговое окно, затем после ответа на вопрос и нажатия кнопки Проверка диалоговое окно закрывается и вызывающем окне выводится результат теста:

В новой Web-странице доступ к элементам открывшего его окна (для чтения или изменения) можно выполнить, если перед элементом Web-страницы открывшего окна задать свойство opener объекта window.

Пример 4.5.56. Использование свойства opener:

Тело документа HTML для ввода фамилии пользователя, вызова окна ввода login и пароля пользователя и вывода значений login и пароля имеет следующий вид:

<form>

<table>

<tr>

<td>Введите свою фамилию:</td>

<td><input type="text" id="userName"

value=""></td>

</tr>

<tr colspan="2" style="text-align: center">

<td><input type="button"

onclick="openAccessWindow()"

value="Ввод login и пароля"></td>

</tr>

<tr>

<td>Ваш login:</td>

<td><input type="text"

id="userLogin" value=""></td>

</tr>

<tr>

<td>Ваш пароль:</td>

<td><input type="text"

id="userPass" value=""></td>

</tr>

</table>

</form>

Функция открытия нового окна для ввода значений login и пароля имеет следующий вид:

function openAccessWindow()

{

// Проверка ввода фамилии

if (document.getElementById("userName").value == "")

alert("Не введена фамилия");

else // Если фамилия введена

{

// Задание ширины и высоты нового окна

winWidth = 400;

winHeight = 300;

// Определение координат x и y левого

// верхнего угла окна для того, чтобы

// окно было выведено в центре экрана

winLeft = (screen.availWidth - winWidth) / 2;

winTop = (screen.availHeight - winHeight) / 2;

// Задание свойств конфигурации окна

winProps = "height=" + winHeight + ", width=" +

winWidth + ", top=" + winTop + ", left=" +

winLeft + ", screenX=" + winTop +

", screenY=" + winLeft;

// Открытие нового окна для

// ввода login и пароля

accessWin=

window.open("accessBox.html",

"accessWindow", winProps);

}

}

Тело документа HTML для ввода login и пароля пользователя имеет следующий вид:

<h3>Здравствуйте, <span id="userName"

style="color:green">пользователь</span>!</h3>

<form>

<table>

<tr>

<td>Введите login:</td>

<td><input type="text"

id="userLogin" value=""></td>

</tr>

<tr>

<td>Введите пароль:</td>

<td><input type="password"

id="userPass" value=""></td>

</tr>

<tr>

<td colspan="2"><input type="button"

onclick="doClose()" value="Возврат"></td>

</tr>

</table>

</form>

В элементе задан вызов функции openerParms()при загрузке Web-страницы:

<body onload="openerParms()">

Эта функция получает фамилию пользователя из открывающего окна

function openerParms()

{

try

{

document.getElementById

("userName").firstChild.nodeValue =

window.opener.document.getElementById

("userName").value;

}

catch(Error) // Если ошибка при получении фамилии

{

alert("Вызывающее окно закрыто");

}

}

Функция doClose() заносит значения login и пароля в соответствующие текстовые поля открывающего окна, а затем закрывает текущее окно:

function doClose()

{

// Если login и/или пароль не введены

if (document.getElementById("userLogin").value == "" ||

document.getElementById("userPass").value == "")

// Вывод сообщения

alert("Не введен login и/или пароль");

else

{

try

{

// Передача login пользователя

// в вызывающее окно

window.opener.document.getElementById

("userLogin").value =

document.getElementById

("userLogin").value;

// Передача пароля пользователя

// в вызывающее окно

window.opener.document.getElementById

("userPass").value =

document.getElementById

("userPass").value;

// Закрытие окна

window.close();

}

// Если ошибка при передаче login и пароля

catch(Error)

{

alert("Вызывающее окно закрыто");

}

}

}

В первой Web-странице вводится фамилия пользователя, а затем нажимается кнопка Ввод login и пароля. После ввода значений login и пароля и нажатия кнопки Возврат во второй Web-странице в первой Web-странице в текстовых полях выводятся значения login и пароля пользователя:


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: