Базы данныхИнтернетКомпьютерыОперационные системыПрограммированиеСетиСвязьРазное
Поиск по сайту:
Подпишись на рассылку:

Назад в раздел

Вызов JavaScript из аплета

div.main {margin-left: 20pt; margin-right: 20pt}Вызов JavaScript из аплета Только для NetscapeВызов функции Javascript из аплета может быть осуществлен через метод showDocument. В URL в качестве протокола нужно вывести "javascript:".

[Java applet]
import java.applet.*; import java.net.*; public class inJava extends Applet{ public void init(){ String msg = "We will jump to an HTML tag"; try { getAppletContext().showDocument (new URL("javascript:doAlert("" + msg +"")")); getAppletContext().showDocument (new URL("javascript:jumpTo("#JUMP")")); } catch (MalformedURLException me) { } } }

[Javascript and HTML]
<HTML><HEAD></HEAD><BODY> <SCRIPT> function doAlert(s) { alert(s); } function jumpTo(tag) { self.location=tag; } </SCRIPT> <APPLET CODE="inJava.class" NAME="myApplet" MAYSCRIPT HEIGHT=400 WIDTH=10> </APPLET> <P> <A NAME="JUMP">jump here from Java via Javascript</A> </BODY> </HTML>
Для Netscape и Microsoft Internet Explorer v4 и болееС IE4, Microsoft включает в поставку паке от Netscape netscape.javascript.* для поддержки доступа из JAVA аплетов к объектам Javascript. Для компиляции такого аплета, необходимо добавить в CLASSPATH пакет Netscape java40.jar. Это примерно выглядит так:
set CLASSPATH= .;c:windevjdk1.1.3libclasses.zip; c:Program FilesNetscapeCommunicatorProgramJavaClassesjava40.jar;
Имейте ввиду, что именно Ваш CLASSPATH может выглядеть совершенно по другому.

Для компиляции с IE, сперва найтие директорию javapackages в директории Windows или WinNt. Там обычно лежат несколько zip файлов со странными именами. В моей инсталяции (IE5) файл Qk1r3vrp.zip как раз и содержит все необходимые 2 класса, JSObject.class и JSException.class. До компиляции, добавьте этот архив в classpath, или же распакуйте эти два класса и запакуйте в новый архив, но при этом не забудье про директории, а затем добавьте уже его. Однако если же Вы будете компилировать аплет при помощи компилятора от Microsoft, то эту операцию проделывать не нужно.

В следующем примере, Вам просто будет необходимо в текстовом поле вводить функцию Javascript и по нажатию кнопки она будет выполнена. К примеру, введите alert('Hello from JAVA'). Или же Вы можете выполнять функции находящиеся на самой странице, на которой находится и аплет. Тег Applet должен содержать параметр MAYSCRIPT для того, что у аплета был доступ к объекту JSObject.
import java.applet.*; import java.awt.*; import java.awt.event.*; import netscape.javascript.*; public class jsJAVA extends Applet implements ActionListener { Button b; TextField t; public void init() { t = new TextField(20); add(t); b = new Button("execute Javascript"); add(b); b.addActionListener(this); } public void actionPerformed(ActionEvent ae) { if (ae.getSource() == b) { JSObject win = (JSObject) JSObject.getWindow(this); win.eval(t.getText()); } } }
Другой путь заключается в использовании Reflection API. При этом, не нужно будет модифицировать CLASSPATH и импортировать пакет netscape.jsobject.
// posted by C Werner on the realhowto list import java.lang.reflect.*; ... // Somewhere in the applet class ... ... String jscmd = "window.close()"; /* JavaScript command */ String jsresult = null; boolean success = false; try { Method getw = null, eval = null; Object jswin = null; Class c = class.forName("netscape.javascript.JSObject"); /* does it in IE too */ Method ms[] = c.getMethods(); for (int i = 0; i < ms.length; i++) { if (ms[i].getName().compareTo("getWindow") == 0) getw = ms[i]; else if (ms[i].getName().compareTo("eval") == 0) eval = ms[i]; } } Object a[] = new Object[1]; a[0] = this; /* this is the applet */ jswin = getw.invoke(c, a); /* this yields the JSObject */ a[0] = jscmd; Object result = eval.invoke(jswin, a); if (result instanceof String) jsresult = (String) result; else jsresult = result.toString(); success = true; } catch (InvocationTargetException ite) { jsresult = "" + ite.getTargetException(); } catch (Exception e) { jsresult = "" + e; } if (success) System.out.println("eval succeeded, result is " + jsresult); else System.out.println("eval failed with error " + jsresult);


  • Главная
  • Новости
  • Новинки
  • Скрипты
  • Форум
  • Ссылки
  • О сайте




  • Emanual.ru – это сайт, посвящённый всем значимым событиям в IT-индустрии: новейшие разработки, уникальные методы и горячие новости! Тонны информации, полезной как для обычных пользователей, так и для самых продвинутых программистов! Интересные обсуждения на актуальные темы и огромная аудитория, которая может быть интересна широкому кругу рекламодателей. У нас вы узнаете всё о компьютерах, базах данных, операционных системах, сетях, инфраструктурах, связях и программированию на популярных языках!
     Copyright © 2001-2024
    Реклама на сайте