Applet's Packages属性为空JRE7u21

Applet's Packages attribute is null JRE7u21

本文关键字:属性 JRE7u21 Packages Applet      更新时间:2023-09-26

使用JavaFX applet:

我用document.getElementById("APPLET_ID")得到的javascript对象在Windows下没有Packages属性。我在Windows XP、IE8、FF和最新版本的Chrome上进行了测试,但在Windows 7下也出现了同样的问题。

在Ubuntu和JRE 7u7 x64下,没有这样的问题。

下面是我的测试代码:
package test;
import netscape.javascript.JSObject;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;
public class Main extends Application {
private JSObject js;
TextField tf;
@Override
public void start(Stage primaryStage) {
js = this.getHostServices().getWebContext();
HBox hb = new HBox();
Scene s = new Scene(hb, 400, 400);
tf = new TextField("MAIN");
primaryStage.setScene(s);
hb.getChildren().add(tf);
primaryStage.show();
runTest();
}
public static void main(String[] args) {
launch(args);
}
void runTest(){
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Platform.runLater(
new Runnable() {
@Override
public void run() {
tf.setText("" + js.eval("document.getElementById('applet_id').Packages == null"));
}
}
);
}
}).start();
}
}

在Ubuntu JRE7u7x64下显示"false",在Windows和Ubuntu JRE7u21下显示"true"。

正如JavaFX2部署文档页面告诉我的那样,它看起来像一个JRE错误。你觉得怎么样?

http://docs.oracle.com/javafx/2/deployment/javafx_javascript.htm。

归档于Jira: https://javafx-jira.kenai.com/browse/RT-30732

看起来这是一个预期的变化,因为2011:http://www.oracle.com/technetwork/java/javase/7u21-relnotes-1932873.html这个Packages属性不再有效。

所以如果你需要从JS回调到applet,你必须直接访问它的方法。

并使用Trusted-Library manifest属性来避免警告。

但是当你使用Trusted-Library时,你不能做你想做的。例如,如果您使用Axis2 web服务。

因此,您必须使用仅受信任的manifest属性。但是这禁止你从JS中调用方法。

简单的解决方法:让线程定期检查JS回调队列并处理它们。这是痛苦的,可怕的POJO,但它有效。

对Oracle:由于

  • 用于更新在线文档
  • 用于宣布小版本中的主要更改
  • 让web集成变得如此简单。
  • 在u25中添加其他导致20秒灰屏延迟的安全检查

你知道Adobe吗?听说他们有很好的东西…我很生气。