可以在javascript事件中调用applet的方法
解决方案 »
- 求<<数据结构与问题求解 java语言描述>>(Data Structure&Problem Solving Using Java)第四版weiss著,习题答案
- 在 windows 下, java gui 程序, 主 Frame 关闭后, 会导致所在进程退出么
- 请问java的子类如何重载父类的方法?
- Heritrix配置后,不能抓取,请求帮助
- class文件命名问题
- 一个关于session的题
- 如何做工具栏,是用什么组件做的?
- 这样的问题你遇到过没有?
- jsp 中include的问题?急
- 提个问题哈!初学JAVA,我安装的是j2sdk1.4.1_01,不知道是否可行?如果不行,那安装啥,请给出下载网址。谢谢!
- 请问oicq的原理是什么,运行机制是什么?用java的socket能实现吗?需要了解那些基本协议?看那些书呢?
- 新手的问题????
Netscape only
A Javascript function is called from Java by using the showDocument method. A URL is needed with "javascript:" as the protocol.
[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 AND Microsoft Internet Explorer v4
With IE4, Microsoft included the Netscape package netscape.javascript.* to allow a JAVA applet access to Javascript objects. To compile such Applet, you must adjust the CLASSPATH to include the Netscape java40.jar. To use the Netscape JAR, the CLASSPATH will look like this: set CLASSPATH=
.;c:\windev\jdk1.1.3\lib\classes.zip;
c:\Program Files\Netscape\Communicator\Program\Java\Classes\java40.jar;
Note that your CLASSPATH may be different depending on your JDK installation/version
To compile with IE, first locate the java\packages directory in the Windows or WinNt directory. You will find a bunch a zip files with strange names. On my installation (IE5), the file Qk1r3vrp.zip is the one containing the 2 classes you need, JSObject.class and JSException.Class. Include this zip in the classpath before compiling (or you can extract the 2 files (with directory) and create a new smaller ZIP (again with the directory) and use the new zip in the classpath). Note that if you compile with the Microsoft compiler, you don't need to do this. NOTE: Here, you find will a a JAR containing the required objects to compile classes using the LiveConnect mechanism. This jar file can be used in the CLASSPATH to build MAYSCRIPT applets. Note that the jar is good only at compile time. In the following example, you type in the TextField a Javascript function and press the button to execute the function. For example, try alert('Hello from JAVA'). Or you can execute function defined on the same page as the Applet. The Applet must contains the MAYSCRIPT parameter to be able to use 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());
}
}
}
Another way is to use the Reflection API. That way you don't need to modify your CLASSPATH for compilation or even import the netscape.jsobject package. // 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);