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

如何在Safari中将Javascript对象传递给Java小程序?,java,javascript,safari,Java,Javascript,Safari,我试图从Javascript调用Java小程序,但当我传递一个对象时,Java小程序只接收null。这在IE和Firefox中有效,但在Safari4中不起作用(尝试过OSX和Windows版本,两者似乎都不起作用) 我调用的Java小程序方法可能如下所示: public void sampleFunction(JSObject someobject) throws Exception { someobject.call("somemethod"); } 以及调用它的HTML/Javas

我试图从Javascript调用Java小程序,但当我传递一个对象时,Java小程序只接收null。这在IE和Firefox中有效,但在Safari4中不起作用(尝试过OSX和Windows版本,两者似乎都不起作用)

我调用的Java小程序方法可能如下所示:

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);

...
var testobject={somemethod:function(){};
document.TestApplet.sampleFunction(testobject);
NullPointerException是Safari中的结果,因为Java小程序中的“someobject”参数为null。同样,在Firefox和IE中,在Windows、OSX和Linux中,这也可以正常工作,但在Safari中,sampleFunction()将被传递一个空参数

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


Safari刚刚坏了吗?有什么想法吗?

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

您在google chrome中尝试过这种方法吗?这也使用了WebKit,这可能是WebKit的问题。在Chrome for Windows中工作正常。在Chrome for Linux或OSX中不工作。不知道这是否与它有关:你能将“applet”标记替换为“this similor”吗?这不是我所看到的权限问题,这是一个完全不同的错误。使用对象标记kes没有区别。是的,这正是我一直在做的。我有一种机制,使回调获得唯一的名称,并可以使用基于文本的名称进行调用。尽管如此,这仍然是一个愚蠢的低效黑客,因为只有一个坏掉的浏览器。每一个完成的javascript都至少包含一个“由于一个坏掉的浏览器而导致的愚蠢和低效的黑客行为”。除非你不关心那些仍在使用IE6的数百万用户……好吧,我们不应该关心一个有10年历史的浏览器。@matthijs不幸的是,“不应该”和“做”是两码事。而且,它还不到10年(直到2011年8月)。