我一直在从事一个需要在 Java 和 JavaScript 之间进行双向通信的项目。我已经成功地让它在 OS X 的所有浏览器下运行,但我现在面临着让它在任何浏览器下的 Windows 上运行的挑战。目前它根本行不通。
我只是想知道是否需要做一些特别的事情才能让 JavaScript 与 Java 进行通信?
我的小程序代码如下所示:
<applet id='theApplet'
code="com/company/MyApplet.class"
archive="SMyApplet.jar"
height="50" width="900"
mayscript="true" scriptable="yes">
Your browser is ignoring the applet tag.
</applet>
加载小程序后,我会尝试在其上调用函数,如下所示:
alert("Call some java:" + theApplet.testFunc());
在萤火虫控制台中,我收到以下错误:
theApplet.testFunc is not a function
我可以确认这在 IE 中也不起作用。
当页面加载时,我打开了 java 控制台,我可以看到小程序已成功加载并准备好接受调用。
任何帮助将不胜感激!
干杯
更新:这是暴露我试图调用的公共 api 的精简 java 代码。
package com.company;
import com.google.gson.Gson;
import java.applet.*;
import java.io.*;
import java.net.*;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.*;
import javax.xml.namespace.QName;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.events.*;
import netscape.javascript.*;
public class MyApplet extends Applet implements Runnable
{
public void init()
{
JSON = new Gson();
isReadyVar = 0;
workThread = null;
}
public void start()
{
}
public void run()
{
System.out.println("Done");
}
public void stop()
{
}
public void destroy()
{
}
/* Public API */
public int testFunc()
{
return 200;
}
}
更新 [已解决]:
我弄清楚问题到底出在哪里。原来我使用的 Gson 库没有签名;但我自己的罐子是。Windows 上的浏览器要求所有库都经过签名;所以我用我的java文件打包Gson并签署了很多,它解决了问题!感谢大家的帮助!