java - 如何将 Javascript 对象传递给 Safari 中的 Java 小程序?

标签 java javascript safari

我正在尝试从 Javascript 调用 Java applet,但是当我传递一个对象时,Java applet 只接收到 null。这适用于 IE 和 Firefox,但不适用于 Safari 4(尝试过 OSX 和 Windows 版本,似乎都不起作用)。

我正在调用的 Java applet 方法可能如下所示:

public void sampleFunction(JSObject someobject) throws Exception
{
   someobject.call("somemethod");
}

以及调用它的 HTML/Javascript:

<applet archive="Test.jar" code="Test.class" width="0" height="0" id="TestApplet" MAYSCRIPT></applet>
...
var testobject = { somemethod: function() {} };
document.TestApplet.sampleFunction(testobject);

NullPointerException 是 Safari 中的结果,因为 Java 小程序中的“someobject”参数为空。同样,这在 Windows、OSX 和 Linux 中的 Firefox 和 IE 中运行良好,但在 Safari 中,sampleFunction() 将传递一个空参数。

此外,反向似乎也不起作用。如果我得到窗口对象并从 Java 调用 Javascript,我传递的任何对象都不起作用。例如,我可以传递一个字符串数组,在 Javascript 中我得到一个 [Ljava.lang.String 类型的对象,但我无法访问其中的任何内容(长度未定义,数组运算符不起作用)。

是 Safari 坏了还是什么?有什么想法吗?

最佳答案

如果可以,我建议将对象序列化为 JSON 字符串。您可以从 json.org 获取 json2.js 并使用 json.stringify(obj) 将其发送到您的 Java 小程序。在 java 端,您应该能够将 JSON 字符串反序列化为 native 对象。这可能是最可靠的数据传输方法。这种方法的缺点是,您可能需要一种方法来指定从 Java 端运行的回调方法。

关于java - 如何将 Javascript 对象传递给 Safari 中的 Java 小程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2247019/

相关文章:

html - 新月形 css 在 safari 中不起作用

java - 我想要 Spring 注入(inject)的函数需要可变参数。我应该提供一个需要列表的重载吗?

java - Java Google App Engine 的 Cron 作业帮助

javascript - 如何使用 Reactjs 更新 Google 电子表格中的特定行?

javascript - 一行代码的单元测试

html - Safari Mobile Multi-Line <Select> aka GWT Multi-Line ListBox

java - JAXB-2 Maven 插件、模式包含和绑定(bind)

java - 使用 Java Google App Engine 批量加载程序将整个数据存储区下载到一个 csv 文件

javascript - 如何将 Cheerio DOM 节点转回 html?

javascript - iPad2 上的慢速 jQuery 动画