0

使用 JavaFX 小程序:

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

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

这是我的测试代码:

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

4

1 回答 1

0

看起来这是自 7u21 以来的预期变化:http ://www.oracle.com/technetwork/java/javase/7u21-relnotes-1932873.html 此 Packages 属性不再有效。

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

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

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

因此,您必须使用 Trusted-Only 清单属性来执行此操作。但这禁止你从 JS 调用方法。

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

所以对甲骨文:谢谢

  • 用于更新在线文档
  • 用于宣布在次要版本中所做的重大更改
  • 使 Web 集成变得如此简单。
  • 用于在 u25 中添加其他导致 20 秒灰屏延迟的安全检查

你知道 Adob​​e 吗?听说他们有很好的东西...我很生气。

于 2013-06-24T17:09:36.047 回答