使用LiveConnect的Javascript到Java通信不起作用

Javascript to Java communication using LiveConnect not working

本文关键字:Java 通信 不起作用 Javascript LiveConnect 使用      更新时间:2023-09-26

我一直在做一个项目,该项目需要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());

在firebug控制台中,我得到以下错误:

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

更新[SOLVED]:

我弄清楚问题到底出在哪里了。原来我使用的Gson库没有签名;但我自己的罐子是。windows上的浏览器要求对所有库进行签名;所以我把Gson和我的java文件打包在一起;签了字就解决了问题!感谢大家的帮助!

我发现了问题的确切原因。原来我使用的Gson库没有签名;但我自己的罐子是。windows上的浏览器要求对所有库进行签名;所以我把Gson和我的java文件打包在一起;签了字就解决了问题!感谢大家的帮助!

alert("Call some java:" + document.getElementbyId("theApplet").testFunc());

确保将testFunc()方法声明为public访问。

如果不起作用,请将小程序代码作为SSCCE发布。

BTW

错误

code="com/company/MyApplet.class" 

正确

code="com.company.MyApplet" 

BTW 2

错误

..scriptable="yes">

正确

..scriptable="true">

由于applet元素已被弃用,我使用以下代码,它至少在Firefox中有效:

<object id="MyApplet" classid="java:com.example.myapplet"
  codetype="application/java" codebase="bin/" height="10" width="10"
</object>