applet标签及其code等所有属性在现代浏览器中被解析器直接忽略,不触发任何加载行为;根本原因是NPAPI接口被全删、HTML5将其视为无效标签、JDK已移除applet包,且无现代替代方案。

applet 标签的 code 属性不是“被废弃后怎么替代”,而是整个标签连同其所有属性(包括 code、archive、codebase)在现代浏览器中**根本不会触发任何加载行为**——它已被解析器直接忽略,不发请求、不报错、不执行。
你写 <applet code="MyApplet.class"></applet>,浏览器 DOM 里能看到这个节点,但 Network 面板里查不到 .class 请求,console 里也不会出现异常。这不是配置问题,是能力归零。
为什么 code 属性失效了
根本原因不是 HTML 规范调整,而是底层支撑链路被全盘移除:
- Chrome 45+、Firefox 52+、Edge 14+、Safari 全部删除 NPAPI 插件接口,而 Java Applet 必须通过该接口与 JVM 通信
- HTML5 解析器将
applet视为未知无效标签,跳过所有相关逻辑(包括code路径解析、archive解压、codebase拼接) - JDK 17 彻底删除
java.applet包,Applet类已不存在;JDK 9 起就标记为 @Deprecated - 即使你用 IE 或旧版 Firefox ESR,JRE 默认禁用未签名 Applet,且 Oracle 自 2019 年起停止发布含浏览器插件的 JRE
试图用 object 或 embed 绕过没用
有人试过写 <object type="application/x-java-applet"> 或 <embed type="application/x-java-applet">,结果一样:
-
type="application/x-java-applet"MIME 类型被所有现代浏览器硬编码拒绝注册 -
classid="clsid:8AD9C840-..."是 IE 专属 CLSID,仅在 IE6–11 且启用 ActiveX 的环境下可能触发,但现代 Windows 默认禁用 ActiveX,且该 CLSID 在 JDK 8u333 后不再响应 -
pluginpage、codebase等属性仍保留在 DOM 中,但浏览器根本不读取它们——解析阶段就丢弃了整个节点
真正能跑遗留 Applet 的唯一路径
绕开浏览器,用 JDK 自带工具或重打包:
- 用
appletviewer:把 HTML 文件拖进$JAVA_HOME/bin/appletviewer(JDK 8u333 或更早),它会启动独立 JVM,无视浏览器限制 - 改造成 JavaFX/Swing 桌面应用:删掉
extends Applet,改成extends Application或extends JFrame,用javac+jar打包,双击运行 - 用 CheerpJ(WebAssembly JVM):加载 .class 字节码,但注意:
paint()、AWT 事件循环、MediaTracker等多数老 API 不支持,需手动重写渲染和输入逻辑
iframe、WebAssembly、Web Components 或标准 JS API 加载,跟 applet 完全无关。很多人卡在反复调 code 路径、加 archive、换 codebase,其实从第一行 HTML 开始,就已经走不通了。



















