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


Доступ к аплетам в JavaScript
Возможность взаимодействия с аплетами, происхождение которой связано с технологией от Netscape, называемой LiveConnect, восходит к Netscape 3, где она была впервые применена.

Эта технология открывает возможность согласованного взаимодействия JavaScript, Java и подключаемых модулей расширений, обеспечивая в каждом случае автоматическое преобразование типов данных в подходящую форму. Microsoft реализовала аналогичные возможности в IE4, не связывая их с маркой LiveConnect.

Процесс взаимодействия внедренных объектов и JavaScript оказывается довольно сложным, зависящим от браузера и даже от версии одного и того же браузера.

Важно то, что, независимо от используемого названия, соответствующие возможности оказываются доступными в IE4+ (кроме версий для Macintosh) и Netscape 3+ (хотя ранние версии Netscape 6 имеют проблемы), а также в браузерах на базе Mozilla.

Анлеты доступны по имени через массив applets [ ] объекта Document или непосредственно через объект Document. Рассмотрим следующий фрагмент HTML:


<applet code="myhelloworld.class" width="400" height="100"
name="myhelloworld" id="myhelloworld">
<em>Ваш браузер не поддерживает Java!</em>
</applet>

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


document.applets[0]
// или
document.applets["myhelloworld"]
// или наиболее предпочтительный метод
document.myhelloworld

Свойства объекта Applet JavaScript, определенные сначала в соответствии с объектной моделью браузера, а позже в DOM, описаны в приложении Б и полностью соответствуют атрибутам дескриптора <applet> (X)HTML, для которого этот объект определен.

В русло нашего обсуждения взаимодействия JavaScript с Java укладывается и тот факт, что все свойства и методы класса аплета, объявленные, как publiс, оказываются доступными и через объект Applet!

Рассмотрим следующее определение класса myhelloworld Java для предыдущего примера. Соответствующий вывод (при указанном выше варианте внедрения аплета)


import Java.applet.Applet;
import java.awt.Graphics;
public class myhelloworld extends Applet
{
String message;
public void init( )
{
message = new String("Привет всем браузерам от Java!");
}
public void paint(Graphics myScreen)
{
myScreen.drawstring(message, 25, 25);
}
public void setMessage(String newMessage)
{
message = newMessage;
repaint( );
)
)

А здесь начинается самое интересное. Ввиду того что метод setMessage ( ) класса myhelloworld объявлен с ключевым словом public, он оказывается доступным и в соответствующем объекте Applet. В JavaScript этот метод можно вызвать, например, с помощью


document.myhelloworld.setMessage("Вот, полюбуйтесь новым сообщением!");

Прежде чем продолжить обсуждение данного примера, важно заметить, что аплеты часто требуют много времени для загрузки. Браузеру требуется не только загрузить программный код, но и запустить виртуальную машину Java, а также подождать, пока аплет не пройдет все фазы инициализации в процессе подготовки его для выполнения.

Именно по этой причине никогда не следует пытаться получить доступ к аплету из JavaScript, не убедившись в том, что аплет готов для выполнения. Лучше всего для индикации окончания загрузки аплета использовать обработчик onload для объекта Document.

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

Данный подход иллюстрируется следующим примером, использующим ранее определенный аплет myhelloworld:


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtmll/DTD/xhtmll-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Привер взаимодействия с аплетом</title>
<meta http-equiv="Content-Type"
content="text/html; charset=windows-1251" />
</head>
<script type="text/javascript">
<!--
var appletReady = false;
function changeMessage(newMessage) {
if (!navigator.javaEnabled( )) {
alert("Извините! Java не доступен!");
return;
)
if (appletReady)
document.myhelloworld.setMessage(newMessage);
else
alert("Извините! He закончилась загрузка аплета");
}
// —>
</script>
<body onload="appletReady = true;">
<applet code="myhelloworld.class" width="400" height="100"
name="myhelloworld" id="myhelloworld">
<em>Ваш браузер не поддерживает Java!</em>
</applet>
<form action="#" method="get" onsubmit="return false;" name="inputForm"
id="inputForm">
<input type="text" name="message" id="message" />
<input type="button" value='^Изменить сообщение"
onclick="changeMessage(document.inputForm.message.value);" />
</form>
</body>
</html>

Указанный подход открывает очень широкие перспективы. Если переменные класса объявлены с ключевым словом public, их можно устанавливать и читать так, как и следовало ожидать:

document.имяАплета.имяПеременной

Наследуемые переменные тоже должны быть доступны.

Замечание. Annemujava, связанные с аплетами, определенными в рамках дескрипторов <object>, получают свойства и методы риЬИстак, будто они определены внутри дескрипторов <applet>. При этом использование <object> вместо <applet> потенциально обеспечивает меньшую совместимость, поскольку, например, Netscape 4 не обеспечивает представление этого элемента HTML сценариям.


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


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

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


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







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