Связь Javascript с Java с использованием LiveConnect не работает

Я работал над проектом, который требует связи в обоих направлениях между 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, и я вижу, что апплет успешно загружается и готов к приему вызовов.

Любая помощь будет принята с благодарностью!

ура


Обновление: вот урезанный Java-код, демонстрирующий общедоступный 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, которую я использовал, не была подписана; но моя собственная банка была Браузеры на окнах требуют, чтобы все библиотеки были подписаны; поэтому я упаковал Gson с моими java-файлами и подписал лот, и это решило проблему! Спасибо за помощь всем!

3 ответа

Решение

Я выяснил, в чем именно проблема. Оказывается, что библиотека Gson, которую я использовал, не была подписана; но моя собственная банка была Браузеры на окнах требуют, чтобы все библиотеки были подписаны; поэтому я упаковал Gson с моими java-файлами и подписал лот, и это решило проблему! Спасибо за помощь всем!

Так как applet элемент устарел, я использую следующий код, который работает по крайней мере в Firefox:

<object id="MyApplet" classid="java:com.example.myapplet"
  codetype="application/java" codebase="bin/" height="10" width="10"
</object>
alert("Call some java:" + document.getElementbyId("theApplet").testFunc());

Убедитесь, что testFunc() метод объявлен как public доступ.

Если это не работает, опубликуйте код апплета как SSCCE.

КСТАТИ

некорректный

code="com/company/MyApplet.class" 

Правильный

code="com.company.MyApplet" 

Кстати 2

некорректный

..scriptable="yes">

Правильный

..scriptable="true">
Другие вопросы по тегам