Связь 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">