1

给定一个多框架 Web 应用程序的一个框架中的 Applet,其中所有框架都从同一个 Web 服务器加载,那么该 Applet 如何调用其他框架中的 JavaScript 方法?我试过这样的事情:

jsobject.call("parent.otherFrame.methodToCall", new String[] {"argument"});

我收到投诉说该功能不存在。但是,如果我这样调用它:

jsobject.eval("parent.otherFrame.methodToCall('argument')");

然后它工作。我试图避免使用eval. 在 Applet 的不同框架中调用代码是否call在每个浏览器和 JVM 组合中可能具有不同的行为?更安全,因为它是eval在 JavaScript 引擎中评估的,而不是部分在 Applet 端?

4

2 回答 2

2

我对 Java 小程序、JavaScript 和(可怕的)框架组合的(有限)经验是,最好:

  • 在页面/框架中包含一个脚本,其中包含小程序。定义一个打算用 0 个或多个参数(其中一个可能是目标框架的名称)调用的函数。
  • 从小程序调用函数。
  • 让 JavaScript 完成繁重的工作,找到正确的框架并做任何需要做的事情。

这有许多优点。

  • 使用(例如)FF 错误控制台比使用 Java 控制台更容易调试 JS。
  • JS可以更快更容易地更新。
  • 每种语言都对它擅长的事情进行编码。您可以进入 Java 编辑器来查看 Java 格式是否正确,而 JS 编辑器可以查看 JS 格式是否正确。与尝试阅读“用 Java 编写的 JS”相反——这是一种可怕的体验。
  • 当您寻求帮助以使脚本正常工作时,您有一个 JS 专家可以轻松阅读的简洁示例!
于 2011-09-13T03:08:29.277 回答
1

没有 eval 的等效代码可能是这样的:

jsobject = (JSObject)jsobject.getMember("parent");
jsobject = (JSObject)jsobject.getMember("otherFrame");
jsobject.call("methodToCall", new String[] {"hello!"});
于 2011-09-13T03:24:42.597 回答