文档

Java™ 教程
隐藏目录
从JavaScript代码中调用小程序方法
路径:部署
课程:Java小程序
章节:更多Java小程序操作

从JavaScript代码调用小程序方法

网页上的JavaScript代码可以与嵌入在页面上的Java小程序进行交互。JavaScript代码可以执行以下操作:

LiveConnect规范详细描述了JavaScript代码与Java代码之间的通信细节。

当JavaScript代码调用Java小程序时,会显示安全警告。为了抑制这些警告,需要在JAR文件清单中添加Caller-Allowable-Codebase属性。指定允许调用小程序的JavaScript代码的位置。有关Caller-Allowable-Codebase属性的信息,请参阅JAR文件清单属性安全

本主题探讨了使用Math小程序示例的JavaScript代码到Java小程序的通信。 MathApplet类和支持的Calculator类提供一组公共方法和变量。网页上的JavaScript代码调用和评估这些公共成员以传递数据并检索计算结果。

Math小程序及相关类

这是MathApplet类的源代码。 getCalculator方法返回Calculator辅助类的引用。

 
package jstojava;
import java.applet.Applet;

public class MathApplet extends Applet{

    public String userName = null;
         
    public String getGreeting() {
        return "你好 " + userName;
    }
    
    public Calculator getCalculator() {
        return new Calculator();
    } 
    
    public DateHelper getDateHelper() {
        return new DateHelper();
    }
    
    public void printOut(String text) {
        System.out.println(text);
    }
}

Calculator类中的方法允许用户设置两个值,添加数字,并在范围内检索数字。

package jstojava;

public class Calculator {
    private int a = 0;
    private int b = 0; // 假设b > a
    
    public void setNums(int numA, int numB) {
        a = numA;
        b = numB;
    }
    
    public int add() {
        return a + b;
    }
    
    public int [] getNumInRange() {    
        int x = a;
        int len = (b - a) + 1;
        int [] range = new int [len];
        for (int i = 0; i < len; i++) {
            range[i]= x++;
            System.out.println("i: " + i + " ; range[i]: " + range[i]);
        }
        return range;
    }
}

getDate 方法位于 DateHelper 类中,用于返回当前日期。

package jstojava;
import java.util.Date;
import java.text.SimpleDateFormat;

public class DateHelper {
    
    public static String label = null;
        
    public String getDate() {
        return label + " " + new SimpleDateFormat().format(new Date());
    }

}

部署 Applet

将 applet 部署在一个网页中,AppletPage.html。在部署 applet 时,确保为 applet 指定一个 id。稍后会使用 applet id 来获取对 applet 对象的引用。

<script src=
  "https://www.java.com/js/deployJava.js"></script>
<script>
    <!-- applet id 可用于获取对 applet 对象的引用 -->
    var attributes = { id:'mathApplet',
        code:'jstojava.MathApplet',  width:1, height:1} ;
    var parameters = { jnlp_href: 'math_applet.jnlp'} ;
    deployJava.runApplet(attributes, parameters, '1.6');
</script>

接下来,在 AppletPage.html 网页中添加一些 JavaScript 代码。JavaScript 代码可以使用 applet id 作为 applet 对象的引用,并调用 applet 的方法。在下面的示例中,JavaScript 代码设置了 applet 的公共成员变量,调用了公共方法,并获取了 applet 引用的另一个对象 (Calculator) 的引用。JavaScript 代码可以处理原始类型、数组和对象的返回类型。

<script language="javascript">
    function enterNums(){
        var numA = prompt('输入数字 \'a\':','0');
        var numB = prompt(
            '输入数字 \'b\'(应大于数字 \'a\'):','1');
        // 设置 applet 的公共变量
        mathApplet.userName = "John Doe";

        // 调用公共 applet 方法
        var greeting = mathApplet.getGreeting();

        // 获取 applet 引用的另一个类并调用其方法
        var calculator = mathApplet.getCalculator();
        calculator.setNums(numA, numB);

        // applet 返回的原始数据类型
        var sum = calculator.add();

        // applet 返回的数组
        var numRange = calculator.getNumInRange();

        // 查看 Java 控制台日志以获取此消息
        mathApplet.printOut("测试向 System.out 打印");

        // 获取另一个类,设置静态字段并调用其方法
        var dateHelper = mathApplet.getDateHelper();
        dateHelper.label = "今天的日期是:";
        var dateStr = dateHelper.getDate();
        <!-- ... -->
</script>

当数字a = 0和b = 5时,Math applet在网页上显示以下结果:

JavaScript到Java通信的结果

你好 John Doe

a = 0 ; b = 5

和:5

范围数组中的数字:[ 0, 1, 2, 3, 4, 5 ]

今天的日期是:5/28/13 4:12 PM //显示当前日期

在浏览器中打开AppletPage.html以查看Math applet。


注意:  如果你看不到applet运行,请安装至少Java SE Development Kit (JDK) 6 update 10版本。

注意:  如果你看不到示例运行,可能需要在浏览器中启用JavaScript解释器,以使Deployment Toolkit脚本正常运行。

查看由JavaScript代码调用的applet所施加的安全限制

下载源代码以进一步进行实验。


上一页: 从Applet中调用JavaScript代码
下一页: 使用事件处理程序处理初始化状态