我去年创建了一个 Java 小程序,用于从 Web 应用程序到本地运行的 Java 服务器的套接字连接。它工作得很好。
自上次 java 更新(我猜是 7 r21)以来,我无法再访问 javascript 中的方法。现在,我将小程序简化为测试小程序(没有 doPriviligedAction 方法),但即使这样也不再起作用。
当前的代码就像
import java.applet.*;
public class socketApplet extends Applet {
public void init() {
System.out.println("Applet initialisiert.");
}
public void start() {
System.out.println("Applet gestartet.");
}
public void paint() {
System.out.println("Applet aktualisiert.");
}
public void stop() {
System.out.println("Applet angehalten.");
}
public void destroy() {
System.out.println("Applet beendet.");
}
public String testApplet() {
System.out.println("Applet getestet.");
return "Yep, I'm the Applet.";
}
}
在更新之前,我可以像这样在 javascript 中访问 testApplet() 之类的方法:
document.socketApplet.testApplet();
该小程序是自签名的,并嵌入了一个小程序 html 标记。它正在启动(Java 控制台正在打开并打印在 init、start 和 paint 方法中定义的调试消息),但我无法访问 testApplet() 方法。当小程序存在时,Javascript 中的响应是“未定义的”。
在阅读了一段时间(现在几天......)关于新的安全更改之后,我添加了一个 manifest.txt 包含以下内容:
Main-Class: socketApplet
Permissions: all-permissions
Codebase: *
Trusted-Library: true
不管有没有 Trusted-Library 属性,都没有运气。
我必须做什么才能再次启用使用 javascript 的访问?
编辑:实现:
<applet id="socketApplet" width="100" height="100" archive="../../socketApplet.jar" name="socketApplet" code="socketApplet" scriptable="true">
我在最新的 Mac OS X 机器上使用最新版本的 Firefox 和 Safari 进行测试。
Edit2:我正在像这样创建和签署 jar
Edit3:好的,现在我的罐子工作了几次(不是连续工作),我得到了
在控制台中
但大多数时候它不起作用。重新启动浏览器,清除缓存,没有任何效果。现在(再次)要在另一台电脑上测试这个。
Edit4:好的,它运行在带有 windows xp 和 java 32 位 7u25 的虚拟机上——在我的 64 位 mac 上,30 次尝试中只有 1 次。