如何使用Javascript调用Java小程序方法?
去年,我为从web应用程序到本地运行的java服务器的套接字连接创建了一个java小程序。它工作得很好 自从上次java更新(我猜是7 r21)以来,我再也无法访问javascript中的方法了。现在,我将小程序简化为一个测试小程序(没有doPriviligeAction方法),但即使这样也不再有效 当前代码如下如何使用Javascript调用Java小程序方法?,java,javascript,applet,Java,Javascript,Applet,去年,我为从web应用程序到本地运行的java服务器的套接字连接创建了一个java小程序。它工作得很好 自从上次java更新(我猜是7 r21)以来,我再也无法访问javascript中的方法了。现在,我将小程序简化为一个测试小程序(没有doPriviligeAction方法),但即使这样也不再有效 当前代码如下 import java.applet.*; public class socketApplet extends Applet { public void init() {
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">
我正在最新的MacOSX机器上测试最新版本的Firefox和Safari
编辑2:
我像这样创建并签署jar
编辑3:
好吧,现在我的罐子工作了几次(不是一排),我得到了
在控制台里
但大多数情况下,它不起作用。重新启动浏览器,清除缓存,一切都不起作用。现在(再次)在另一台电脑上测试此功能
编辑4:
好的,它运行在一个带有windows xp和java 32位7u25的虚拟机上——在我的64位mac上,30次尝试中只有1次。好的,我找到了所有邪恶的根源 它与小程序无关。令人困惑的是,它在windows上的firefox中工作,而不是在mac上的firefox中工作(相同的FF版本,相同的java版本)。mac上的Safari无法运行,因为插件被禁用 所以这只是Firefox在mac上的问题。我已经测试了不同的情况,在将上面的小程序代码写入html页面时,小程序工作正常。之前,我已经动态创建了小程序(软件中需要的内容): 它可以在任何地方使用,但不能在Mac上的Firefox中使用。因此,作为一种解决方法,我必须将applet嵌入到iframe中,并且必须动态嵌入iframe。这很有效
var mFrame = document.createElement('iframe');
mFrame.id = 'testFrame';
mFrame.height = '200';
mFrame.width = '400';
document.body.appendChild(mFrame);
mFrame.src = 'frame.html'; // contains the applet code
接下来,我将把html标记更改为对象,并嵌入IE支持的标记。谢谢你的帮助安德鲁·汤普森
我不喜欢iframe版本,因为通过javascript访问applet更复杂,但似乎没有其他方法
我将为此提交一份Mozilla错误通知单。
可能与此类似,但另一种情况是:
好吧,我找到了所有邪恶的源头 它与小程序无关。令人困惑的是,它在windows上的firefox中工作,而不是在mac上的firefox中工作(相同的FF版本,相同的java版本)。mac上的Safari无法运行,因为插件被禁用 所以这只是Firefox在mac上的问题。我已经测试了不同的情况,在将上面的小程序代码写入html页面时,小程序工作正常。之前,我已经动态创建了小程序(软件中需要的内容): 它可以在任何地方使用,但不能在Mac上的Firefox中使用。因此,作为一种解决方法,我必须将applet嵌入到iframe中,并且必须动态嵌入iframe。这很有效
var mFrame = document.createElement('iframe');
mFrame.id = 'testFrame';
mFrame.height = '200';
mFrame.width = '400';
document.body.appendChild(mFrame);
mFrame.src = 'frame.html'; // contains the applet code
接下来,我将把html标记更改为对象,并嵌入IE支持的标记。谢谢你的帮助安德鲁·汤普森
我不喜欢iframe版本,因为通过javascript访问applet更复杂,但似乎没有其他方法
我将为此提交一份Mozilla错误通知单。
可能与此类似,但另一种情况是:
测试使用的浏览器是什么版本?启动小程序所用的HTML是什么?为了快速响应,我更新了主要帖子(见最后的编辑部分)建议:1)使小程序的宽度和高度为非零。网页中的0x0元素自动可疑,这可能会触发浏览器中更高级别的安全性,或者触发浏览器安装的用于查找可疑活动的任何工具。2) 添加
scriptable=“true”
属性以指示小程序可能从Javascript.ty调用,但仍然存在相同的问题。。在那些浏览器中工作吗?测试使用的是什么版本的浏览器?启动小程序所用的HTML是什么?为了快速响应,我更新了主要帖子(见最后的编辑部分)建议:1)使小程序的宽度和高度为非零。网页中的0x0元素自动可疑,这可能会触发浏览器中更高级别的安全性,或者触发浏览器安装的用于查找可疑活动的任何工具。2) 添加scriptable=“true”
属性以指示小程序可能从Javascript.ty调用,但仍然存在相同的问题。。在那些浏览器中工作吗?更新:他们以“WONTFIX”的形式关闭了错误通知单-更新:他们以“WONTFIX”的形式关闭了错误通知单-