我一直在从事一个需要在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>

加载完applet之后,我就尝试像下面这样调用函数:
 alert("Call some java:" + theApplet.testFunc());

在firebug控制台中,我得到以下错误:
theApplet.testFunc is not a function

我可以确认这在IE中也不起作用。

页面加载后,我打开了Java控制台,可以看到小程序已成功加载并准备接受调用。

任何帮助将不胜感激!

干杯

更新:这是精简的Java代码,公开了我尝试调用的公共(public)api。
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 lib没有签名;但是我自己的 jar 是Windows上的浏览器要求所有库都经过签名;所以我将Gson与我的java文件打包在一起并签名了很多,它解决了这个问题!谢谢大家的帮助!

最佳答案

我弄清楚问题出在哪里。原来我使用的Gson lib没有签名;但是我自己的 jar 是Windows上的浏览器要求所有库均已签名。所以我将Gson与我的java文件打包在一起并签名了很多,它解决了这个问题!谢谢大家的帮助!

10-08 11:26