Сценарии JavaScript в активных страницах Web© Александр Фролов, Григорий ФроловТом 34, М.: Диалог-МИФИ, 1998, 288 стр. Динамическая загрузка аплетов JavaЕще одна полезная возможность, которая появляется у вас при использовании сценариев JavaScript, - это динамическая перезагрузка аплетов Java в документах HTML, созданных с использованием фреймов. Идея динамической загрузки аплетов заключается в том, что сценарий JavaScript динамически создает документ HTML, в котором находится оператор <APPLET>. Передавая аплету в этом документе различные значения параметров с помощью оператора <PARAM>, сценарий JavaScript может управлять его работой. На рис. 6.3 мы показали документ HTML, состоящий из двух фреймов. Рис. 6.3. Строка в окне аплета и ее шрифтовое оформление зависят от положения переключателей в левом фрейме В левом фрейме находится форма с переключателями и кнопкой, а правой - аплет Java. Если включить один из переключателей с названиями шрифтов, а затем нажать кнопку, то в окне аплета появится название шрифта. Это название будет оформлено с применением шрифта, выбранного вами в левом фрейме. Займемся описанием исходных текстов нашего документа HTML. В файле Index.html (листинг 6.6) находится описание фреймов. Листинг 6.6. Файл chapter6/FrameLoad/Index.html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> <HTML> <HEAD> <TITLE>Динамическая загрузка аплетов</TITLE> </HEAD> <FRAMESET COLS="180,*" FRAMEBORDER=1> <FRAME SCROLLING="auto" NAME="toc" SRC="toc.html"> <FRAME SCROLLING="auto" NAME="mainpage" SRC="main.html"> <NOFRAME> <BODY BGCOLOR="#FFFFFF"> </BODY> </NOFRAME> </FRAMESET> </HTML> Левый фрейм называется toc, а правый - mainpage. Исходный текст документа для фрейма toc мы привели в листинге 6.6. Листинг 6.6. Файл chapter6/FrameLoad/toc.html <HTML> <BODY BGCOLOR="#B0FFD8"> <SCRIPT LANGUAGE="JavaScript"> <!-- var szFont="Arial"; function chkRadio(form,value) { szFont = value; } // --> </SCRIPT> <FORM> <B>Font:</B><BR> <INPUT TYPE="radio" NAME="font" VALUE="Arial" CHECKED onClick="if(this.checked) {chkRadio(this.form,this.value);}"> Arial<BR> <INPUT TYPE="radio" NAME="font" VALUE="Courier" onClick="if(this.checked) {chkRadio(this.form,this.value);}"> Courier<BR> <INPUT TYPE="radio" NAME="font" VALUE="TimesRoman" onClick="if(this.checked) {chkRadio(this.form,this.value);}"> TimesRoman<BR> <INPUT TYPE="radio" NAME="font" VALUE="Helvetica" onClick="if(this.checked) {chkRadio(this.form,this.value);}"> Helvetica<BR> <P> <INPUT TYPE=button VALUE="Show Applet" onClick="parent['mainpage'].location='main.html';"> </FORM> </BODY> </HTML> Для работы с переключателями типа radio мы использовали уже знакомую вам методику. Обработчик события onClick проверяет, находится ли переключатель во включенном состоянии. Если это так, обработчик вызывает функцию chkRadio, передавая ей ссылку на форму и значение свойства value, соответствующее включенному переключателю. Функция chkRadio сохраняет это значение в переменной szFont: function chkRadio(form,value) { szFont = value; } Каждый из переключателей имеет значение параметра VALUE, соответствующее названию одного из шрифтов, доступных аплетам Java. Поэтому переменная szFont хранит название шрифта, выбранного пользователем в левом фрейме. Обработчик события onClick для кнопки, расположенной в левом фрейме, выглядит следующим образом: onClick="parent['mainpage'].location='main.html';"Он устанавливает свойство location фрейма mainpage (то есть правого фрейма), присваивая ему адрес документа main.html. Исходный текст этого документа приведен в листинге 6.7. Листинг 6.7. Файл chapter6/FrameLoad/main.html <HTML> <BODY BGCOLOR="#FFFFFF"> <SCRIPT LANGUAGE="JavaScript"> <!-- var szFont = parent.toc.szFont; document.write("<APPLET CODE=TextOut.class ID=TextOut WIDTH=300 HEIGHT=140 >"); document.write("<param name=Str1 value='" + szFont + "'>"); document.write("<param name=Font1 value='" + szFont + "'>"); document.write("<param name=Type1 value='Plain'>"); document.write("</APPLET>"); // --> </SCRIPT> </BODY> </HTML> Тело документа main.html содержит только сценарий JavaScript. Этот сценарий динамически создает строки оператора <APPLET> с параметрами Str1, Font1 и Type1. Параметр Str1 задает текст, отображаемый в окне аплета. Наш сценарий использует для этого параметра название шрифта, выбранного пользователем в левом фрейме: var szFont = parent.toc.szFont; Параметр Font1 задает шрифт для текста, отображаемого в окне аплета. Этот параметр также задается с использованием названия шрифта, выбранного в левом фрейме: document.write("<param name=Font1 value='" + szFont + "'>"); И, наконец, третий параметр с именем Type1 задает тип шрифта - обычный, жирный или наклонный. В нашем случае всегда используется обычный шрифт. Исходный текст аплета Java, использованного в нашем примере, приведен в листинге 6.8. Это упрощенный вариант алпета, описанного нами в 30 томе “Библиотеки системного программиста” в разделе “Приложение TextOut третьей главы. Листинг 6.8. Файл chapter6/FrameLoad/TextOut.java // ========================================================= // Установка различных шрифтов. // Демонстрация способов передачи параметров в аплет // // (C) Фролов А.В, 1997, 1998 // // E-mail: frolov@glas.apc.org // WWW: http://www.glasnet.ru/~frolov // или // http://www.dials.ccas.ru/frolov // ========================================================= import java.applet.*; import java.awt.*; public class TextOut extends Applet { // ------------------------------------------------------- // Поля класса. // Создаются автоматически для всех параметров аплета // ------------------------------------------------------- private String m_Str1 = "Hello 1"; private String m_Font1 = "Arial"; private String m_Type1 = "Bold"; // ------------------------------------------------------- // Имена параметров // ------------------------------------------------------- private final String PARAM_Str1 = "Str1"; private final String PARAM_Font1 = "Font1"; private final String PARAM_Type1 = "Type1"; // ------------------------------------------------------- // getAppletInfo // Метод, возвращающей строку информации об аплете // ------------------------------------------------------- public String getAppletInfo() { return "Name: TextOut\r\n" + "Author: Alexandr Frolov\r\n" + "E-mail: frolov@glas.apc.org" + "WWW: http://www.glasnet.ru/~frolov" + "Created with Microsoft Visual J++ Version 1.0"; } // ------------------------------------------------------- // getParameterInfo // Метод, возвращающий описание параметров // ------------------------------------------------------- public String[][] getParameterInfo() { String[][] info = { { PARAM_Str1, "String", "Text string to write" }, { PARAM_Font1, "String", "Text font" }, { PARAM_Type1, "String", "Font type" }, }; return info; } // ------------------------------------------------------- // init // Вызывается во время инициализации аплета // ------------------------------------------------------- public void init() { // Рабочая переменная для получения параметров String param; // Получение параметров и сохранение // их значений в полях класса // Строки, которые будут выведены в окно аплета param = getParameter(PARAM_Str1); if (param != null) m_Str1 = param; // Шрифты для отображения строк param = getParameter(PARAM_Font1); if (param != null) m_Font1 = param; // Начертание шрифтов param = getParameter(PARAM_Type1); if (param != null) m_Type1 = param; } // ------------------------------------------------------- // paint // Метод paint, выполняющий рисование в окне аплета // ------------------------------------------------------- public void paint(Graphics g) { // Начальная координата для вывода по вертикали int yStart = 20; // Текущая координата для вывода строки int yCurrent = 20; // Определяем текущие размеры окна аплета Dimension dimAppWndDimension = size(); // Выбираем в контекст отображения желтый цвет g.setColor(Color.yellow); // Закрашиваем внутреннюю область окна аплета g.fillRect(0, 0, dimAppWndDimension.width - 1, dimAppWndDimension.height - 1); // Выбираем в контекст отображения черный цвет g.setColor(Color.black); // Рисуем рамку вокруг окна аплета g.drawRect(0, 0, dimAppWndDimension.width - 1, dimAppWndDimension.height - 1); // Получаем стиль шрифта и выбираем шрифт // в соответствии с этим стилем if(m_Type1.equals("Bold")) g.setFont(new Font(m_Font1, Font.BOLD, 25)); else if(m_Type1.equals("Italic")) g.setFont(new Font(m_Font1, Font.ITALIC, 25)); else if(m_Type1.equals("Plain")) g.setFont(new Font(m_Font1, Font.PLAIN, 25)); // Отступ для первой строки yCurrent += yStart; // Рисуем первую строку g.drawString(m_Str1, 10, yCurrent); } } |