首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Java、Java Applet 與 JavaScript 互相呼叫完整技術指南

     編輯:Java 程式設計入門

三種互通模式總覽

方向技術基礎適用場景瀏覽器支援
JS → Java 靜態方法LiveConnect (Netscape 專有)呼叫 java.lang.System 等系統 API僅舊版 Netscape
JS → Applet 公開方法DOM document.applets[name] 或 document.getElementById()控制 Applet 狀態、傳遞參數所有支援 Java 的瀏覽器
Applet → JSLiveConnect netscape.javascript.JSObject操作 DOM、呼叫 JS 函式、存取表單資料需 MAYSCRIPT 屬性

模式一:JavaScript 呼叫 Applet 公開方法

前置條件

  • Applet 類別宣告為 public
  • 欲暴露的方法宣告為 public
  • <APPLET> 標籤設定 name 屬性

實作範例

<html>
<head>
<script>
function accessApplet() {
    var applet = document.testText;  // 對應 name="testText"
    setTimeout(() => applet.setText('I like JavaScript!'), 1000);
    setTimeout(() => applet.setText('I like JavaScript and Java!'), 2000);
    setTimeout(() => applet.setText('I like Java!'), 3000);
    setTimeout(accessApplet, 4000);
}
</script>
</head>
<body onload="accessApplet()">
<applet code="TestText.class" name="testText" width="450" height="150"></applet>
</body>
</html>
// TestText.java
import java.applet.Applet;
import java.awt.Graphics;

public class TestText extends Applet {
    private String text = "";
    
    public void setText(String s) {  // 必須 public
        text = s;
        repaint();
    }
    
    public void paint(Graphics g) {
        g.drawString(text, 20, 50);
    }
}

模式二:Applet 呼叫 JavaScript (LiveConnect)

必要設定

<applet code="ReadForm.class" width="200" height="100" 
        name="readApp" MAYSCRIPT>  <!-- 關鍵屬性 -->
</applet>

Applet 端實作

import netscape.javascript.JSObject;
import netscape.javascript.JSException;

public class ReadForm extends Applet {
    public void init() {
        try {
            JSObject window = JSObject.getWindow(this);  // 取得 window 物件
            JSObject doc = (JSObject) window.getMember("document");
            JSObject form = (JSObject) doc.getMember("textForm");
            JSObject field = (JSObject) form.getMember("textField");
            String value = (String) field.getMember("value");  // 讀取輸入框值
            
            window.eval("alert('This alert comes from Java!')");  // 呼叫 JS 函式
        } catch (JSException e) { e.printStackTrace(); }
    }
}

JSObject 主要方法

方法功能
getWindow(Applet)取得包含 Applet 的瀏覽器視窗物件
getMember(String)取得 JS 物件屬性/子物件
setMember(String, Object)設定 JS 物件屬性
call(String, Object[])呼叫 JS 函式/方法
eval(String)執行 JS 程式碼字串
removeMember(String)移除 JS 物件屬性
getSlot(int)取得陣列元素
setSlot(int, Object)設定陣列元素

HTML 表單配合範例

<form name="textForm">
    <input type="text" name="textField" size="20">
</form>

安全性與限制

  • 同源政策:Applet 僅能存取同網域頁面的 JS 物件
  • 權限檢查:未簽署 Applet 呼叫 JS 需 MAYSCRIPT,簽署 Applet 仍受沙箱限制
  • 例外處理:JS 執行錯誤會拋出 JSException,必須捕獲處理
  • 執行緒:JS 呼叫發生於 Applet 事件執行緒,避免長時間阻塞

現代替代架構

Java Applet 技術已被瀏覽器淘汰,現代 Web 開發建議:

  • Java 後端 + REST/gRPC API:Spring Boot、Quarkus、Micronaut
  • 前端框架:React、Vue、Angular、Svelte
  • WebAssembly:透過 TeaVM、GWT、CheerpJ 將 Java 編譯為 WASM
  • JavaFX WebView:桌面應用內嵌 Web 引擎雙向通訊
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved