从JApplet发送数据到JavaScript的最简单方法是什么?

3
我有一个包含小应用程序的HTML页面,该应用程序收集数据,然后通过JavaScript调用发送这些数据,JS将其发送到PHP文件。
我可以通过GET方法发送参数和值,但是否有更好的方法?例如,在此小应用程序中可以使用JSON吗?我如何将其发送到JavaScript?
该应用程序不应被签名,因此我不能在那里添加任何花哨的东西,或者我可以?
感谢任何提示/指针。
编辑:我可能应该用其他话来表达:“从JApplet到JavaScript发送数据(> 2kb)的最通用方法是什么?”我希望它能在尽可能多的浏览器上运行(我知道有些人甚至没有安装Java)。
3个回答

4

如何从Java JApplet向Javascript发送数据的最简单方法?

可能是这个:

applet.getAppletContext().showDocument
    (new URL("javascript:someJavaScriptFunction(" + params + ");"));

最近我在Real's How To网站上看到了这个技巧,它位于从Java小程序调用Javascript。该网站总是我检查与Java / JS交互相关任务的首选地点。除了该技术外,还详细介绍了通过Java<->JavaScript传递数据的其他方法,并且(在大多数情况下)进行了演示。

我刚刚发布了一种“简单”的方法。


这个解决方案充斥着“eval”,而且还涉及到URL -- 如果您有一个页面不想触碰URL(因为您正在使用哈希来存储状态等),那该怎么办呢? - Ates Goral
@Ates:“它触及了URL”这是什么意思?访问此沙盒应用程序,告诉我URL是否更改。它使用上面显示的技术,以便(希望)将数据从小程序复制到基于HTML的文本区域。在这个最新的FF中,地址栏中的URL不会更改,使用1.6.0_24 Oracle Java(如果这就是你的意思)。 - Andrew Thompson
@RealHowTo:我从你的网站上的代码(http://www.rgagnon.com/javadetails/java-0172.html)中得到了它。+2分给你的网站。;) - Andrew Thompson
这实际上很简单,而且它有效。我有一个发送更多数据的问题,所以我想发送例如数组或JSON对象,并在JS端接收它。你知道一些常见的库,在每个JRE上都可以做到这一点吗? - pablosd
@cradox23:Java没有内置的JSON编码库,但是有很多可用的。最棒的部分是JSON是有效的Javascript,所以你可以毫不费力地将其插入代码中。 - Jonah

3

您可以通过netscape.javascript.JSObject调用JavaScript函数,并与JavaScript进行通信。详情请参见此处。以下是一个示例:

JSObject win = JSObject.getWindow(this);
win.call("receiveDataFromApplet", new Object[] {param1, param2, param3});

这将使用给定的参数调用所需的函数。 JSObjectJRE/plugin.jar的一部分,因此它将在每个JRE上运行。但是,您需要将其添加到类路径中(在IDE中),以便编译小程序。

这个能在所有浏览器上运行吗?为了编译Java代码以利用JSObject,您必须将包netscape.javascript添加到CLASSPATH中。那么它能在小程序中运行而不会给用户带来麻烦吗? - pablosd
@cradox23 JSObject是每个JRE的“plugin.jar”的一部分。在编译小程序时,您只需要将该jar添加到类路径中即可。 - Bozho
@cradox23 "这个能在所有浏览器上运行吗?" 并非所有浏览器都安装了Java。其中有Java的浏览器中,绝大多数是1.3+版本,但任何运行1.2或1.1版本的浏览器都不包括JSObject。据我所知,包含JSObject类的Jar文件名称也在一段时间前更改了。啊,是的,在How To页面中可以找到它。在1.4.2之前,它被称为jaws.jar - Andrew Thompson

1

从JRE 1.6.27及更高版本开始,IE 6+(不知道是否仅限于IE)每次通过getAppletContext方法执行函数时都会获得焦点。如果您不想这样,最好使用JSObject。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接