Добавляем...


Элементы <iframe>
Двухстороннюю коммуникацию можно также реализовать с помощью комбинации элементов <iframe> и программного кода JavaScript. В некотором смысле исполь-зование внутренних фреймов для обработки RPC-вызовов оказывается проще других подходов, поскольку каждый элемент <iframe> представляет полный документ, на который легко сослаться. Например, если имеется внутренний фрейм

<iframe name="iframel" id="iframel">
</iframe>

то можно сослаться на этот фрейм в форме с помощью

<form name="myform" id="myform" action="load.cgi" method="get" target="iframe1">
<input type="text" name="username" id="username" />
<input type="submit" value="Отправить" />
</form>

и результат подачи запроса формы появится в <iframe>, а не в главном окне, посколь-ку атрибут target указывает на <iframe>. Серверная сторона может предоставить данные, которые появятся в <iframe>, и эти данные сможет увидеть пользователь или обработать программный код JavaScript.

Для обработки RPC-запросов с помощью внутреннего фрейма необходимо создать <iframe> динамически, используя возможности DOM, а затем скрыть этот фрейм, используя средства CSS. Сделав это, можно, например, установить подходящее значение для src элемента <iframe>, а затем читать в соответствующем фрейме ответы или использовать программный код JavaScript, чтобы передать содержимое объемлющему окну. Эта идея реализована в следующем примере.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>RPC-3anpocы с помощью iframe</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
</head>
<body>
<form action="#" method="get">
<input type="text" name="username" id="username" />
<input type="button" value="Отправить" onclick="send(this.form.username.value);" />
</form>
<h1>Ответ сервера: </h1>
<div id="response"></div>
<script type="text/javascript">
<!--
var theIframe = document.createElement("iframe");
theIframe.setAttribute("src", "");
theIframe.setAttribute("id", "myIframe");
theIframe.style.visibility='hidden';
document.body.appendChild(theIframe);
function send(sendValue)
{
var newLocation = 'iframeResponse.php?sendvalue='+escape(sendValue);
theIframe.src = newLocation;
}
function RPCComplete(msg)
{
var region = document.getElementById('response');
region.innerText = msg;
}
//-->
</script>
</body>
</html>

В данном случае программа iframeResponse.php берет сообщение и отвечает пользователю с помощью вызова функции RPCComplete() в главном окне. Ниже при-водится фрагмент возможного PHP-сценария сервера для обработки RPC-запроса. Значение $message было вычислено заранее - мы хотим только продемонстрировать работу функций обратного вызова.

<?php echo "<script>" ;
$call = "window.parent.RPCComplete('".$message."'); ";
echo $call; echo "</script>"; ?>

Чтобы увидеть этот пример в действии, необходимо разместить указанные два файла на сервере. Если это невозможно, посетите страницу http://demos.javascriptref.com/iframedemo.html, чтобы увидеть соответствующий демонстрационный вариант. По мере изучения более сложных примеров программного кода JavaScript вы должны привыкнуть к использованию элементов <iframe>, поскольку эти элементы оказываются полезными не только при создании удаленных сценариев, но и для представления данных XML.
Замечание. Ввиду того что элементы <iframe> являются полноценными окнами, многие браузеры считают их частью журнала навигации, и использование кнопки Назад в таких случаях может порождать проблемы.
назад:
далее:


добавить комментарий
(без перезагрузки и регистрации)


10 случайных разделов

Что ищем на сайте ?


Примеры кода на сайте







@ 2008-2011 Amber
При использовании материалов ссылка на сайт обязательна
Яндекс.Метрика