11

我正在尝试探索嵌入 HTML Java 小程序的 URL 数据功能。

用于实例化 java 小程序1的 HTML 标记的文档不排除此选项,但我似乎无法做到这一点。

我使用(对象和小程序)有不同的 HTML 标记值变体,我认为接近我的目标的是:

<object type="application/x-java-applet" width="100" height="100">
  <param name="archive" value="data:application/java-archive;base64,BASE64_OF_JAR"/>
  <param name="code" value="test.class"/>
  <h1>not working</h1>
</object>

这种变化会导致带有文本“名称”的 IlegalArgumentException。我点击浏览器上的错误图标来检查这个。在 Java 控制台上,整个堆栈跟踪是:

java.net.MalformedURLException: unknown protocol: data
        at java.net.URL.<init>(Unknown Source)
        at java.net.URL.<init>(Unknown Source)
        at sun.plugin.util.ProgressMonitorAdapter.setProgressFilter(Unknown Source)
        at sun.plugin2.applet.Plugin2Manager.setupProgress(Unknown Source)
        at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)

有没有人知道如何做到这一点,或者如果它不可能?

PS:这里有一个 Oracle 如何在 HTML 中嵌入 JNLP 的示例

4

2 回答 2

5

OBJECT 元素的HTML4 规范允许通过URL DATA嵌入内联数据,Oracle的 Applet 实例化文档也允许这样做。执行的测试显示了 Java 浏览器插件(来自 Oracle),以及来自Java SE 6的可用源代码,表明实现不支持它。

在这种情况下,浏览器是否支持似乎并不重要,因为 Object/Applet HTML 元素中资源引用的资源处理是由浏览器插件执行的。

另一种方法是使用applet 反序列化,通过URL DATA 序列化,使用APPLET 元素的OBJECT 属性。正如 HTML4 规范中提到的,没有对 APPLET 和 OBJECT 属性的积极支持,而且 JRE 似乎也不支持从 URL DATA 反序列化对象。

简而言之,JRE 不支持 CODE、OBJECT 和 ARCHIVE HTML 属性中的 base64 反序列化。

还有一个关于 JRE1.4.1 中的 URL DATA 支持的 BUG 未实现Bug ID: 4756961

我在 64 位 Windows 机器上使用 JRE7 的测试结果如下:

  • 通过 URL DATA 将 JAR 传递给 ARCHIVE 属性会导致 Applet2Manager.loadJarFiles() 中的 IllegalArgumentException;
  • 通过 URL DATA 向 CODE 属性传递一个类会导致 Applet2ClassLoader.findClass() 中的 ClassNotFoundException;
  • 通过 URL DATA 将序列化小程序传递给 OBJECT 属性会导致 Plugin2ClassLoader.getResourceAsResource() 中的 FileNotFoundException。
于 2012-09-23T18:30:31.267 回答
2

即使 HTML 标准允许,JRE 通常也不理解 base64 编码数据。

于 2012-09-18T01:38:42.423 回答