http://robertleepeak.blog.51cto.com/917130/197289
avascript与applet之间能够相互通讯给我们带来了很多方便,Java与JavaScript互相补充,以开发功能更完美的Web应用程序。B/S下能够充分利用java的优势,给我们带来更多的网络体验, 方便用户。我用的比较多的是利用Swing组件开发的应用程序利用applet实现B/S下架构, 这样能够充分显示Swing组件的优势,便于系统升级,便于维护;还有就是在WEB下,有时客户端要使用本地的硬件资源,我所知道的是通过applet来实现,通过applet去调用javaAPI(jni,javacomm20-win32【详见http://www.javaeye.com/topic/64859】)来实现。不知道有没有类似applet的实现方式,我想应该有的。我们具体来看看javascript与applet之间到底是怎样通讯的呢?
1.JavaScript访问
Applet
Test.java
Java代码
1.
import java.awt.*;
2.
import java.applet.*;
3.
4.
5.
public class Test
extends Applet {
6.
7.
public void init() {
8.
9. }
10.
11.
public void paint(Graphics g) {
12. g.drawString(
"Welcome to Java!!",
50,
60 );
13. }
14.
15.
public void win() {
16. Frame fr =
new Frame(
"good");
17. fr.setSize(
300,
300);
18. fr.setVisible(
true);
19. }
}
Test.html
1.
<HTML>
2.
<HEAD>
3.
</HEAD>
4.
<BODY
BGCOLOR=
"000000"
>
5.
<CENTER>
6.
<APPLET
id=
"my"
name=
"my"
code=
"Test.class"
width=
"500"
height=
"300"
>
7.
</APPLET>
8.
<input
type=
"submit"
name=
"Submit"
value=
"Submit"
onClick=
"kc()"
>
9.
</CENTER>
10.
<script
language=
"javascript"
>
11. function kc() {
12. document.my.win();
13. }
14.
</script>
15.
</BODY>
16.
</HTML>
Rules
Js代码
1. <applet name=
"appletName" ....../>
2.
3.
//JavaScript
访问
Applet
属性
4. window.document.appletName.appletField (属性必须是
public的,
"window.document."也可以不写)
5. /JavaScript访问Applet方法
6. window.document.appletName.appletMethod (方法必须是
public的,
"window.document."也可以不写)
2.
Applet访问JavaScript
Live Connect提供了Java与JavaScript的接口,可以允许在Java Applet小程序中使用JavaScript。需要用到一个jar包,在C:\WINNT\java\Packages目录下找,大概有5M多,其实就是打开看哪个有netscape.javascript.JSObject。如果没有装个NetScape或从网上下都可以。可以把它重命名为netscape.jar(不是必须的),一定要加入到classpath,目的是使开发的时候能够编译。注意:部署时不需要包括netscape.jar, 因为整个包会下载到客户端,影响速度。
新版本的JRE包括了这些类, Java\jre6\lib\plugin.jar#netscape\javascript\JSObject, 这个类应该可以用在IE和firefox里。
Java代码
1.
//
引入
netscape
类
2.
import netscape.javascript.JSObject;
3.
import netscape.javascript.JSException;
//
可允许在小程序中处理异常事件
4.
5. win=JSObject.getWindow(
this);
//
获取
JavaScript
窗口句柄,引用当前文档窗口
6. doc=(JSObject)win.getMember(
"document");
//
访问
JavaScript document
对象
7. form=(JSObject)doc.getMember(
"textForm");
//
访问
JavaScript form
对象
8. textField=(JSObject)form.getMember(
"textField");访问JavaScript text对象
9. text=(String) textField.getMember(
"value");
//
获取文本区的值
10.
11.
//
调用
JavaScript
的
alert
()方法
12. win.eval(
"alert(\"This alert comes from Java!\")");
13.
14.
//
调用
JavaScript
的
myFunction
(
message
)方法
15.
win.call(
"myFunction"
,
new
Object[]{
"Hello"
});
//
参数用数组的形势表示。
注意:
你必须在
<applet/>
标记中加入
MAYSCRIPT
才能够调用
JSObject
对象,不然会抛出
JSException
异常。你也不必初始化他们,在什么地方用就在什么地方用吧。
3 简单的
Applet访问JavaScript
使用getAppletContext().showDocument(new URL("javascript:alert(1)"));
Java代码
1.
import java.net.*;
2.
3.
public class inJava
extends Applet{
4.
public void init(){
5. String msg =
"We will jump to an HTML tag";
6.
try {
7. getAppletContext().showDocument(
new URL(
"javascript:doAlert(\"" + msg +
"\")"));
8. getAppletContext().showDocument(
new URL(
"javascript:jumpTo(\"#JUMP\")"));
9. }
catch (MalformedURLException me) { }
10. }
11. }
12.
13.
Html代码
1.
<HTML><HEAD></HEAD><BODY>
2.
<SCRIPT>
3. function doAlert(s) {
4. alert(s);
5. }
6. function jumpTo(tag) {
7.
self.location=
tag;
8. }
9.
</SCRIPT>
10.
<APPLET
CODE=
"inJava.class"
NAME=
"myApplet" MAYSCRIPT
HEIGHT=
400
WIDTH=
10
> </APPLET>
11.
<P>
12.
<A
NAME=
"JUMP"
>jump here from Java via Javascript
</A>
13.
</BODY></HTML>