Pregunta

Estoy tratando de crear un archivo de Excel y guardarlo en el sistema de archivos local usando el subprograma Java.Después de firmar la solicitud, puedo crear correctamente el archivo invocando directamente el subprograma.Sin embargo, cuando intento llamar al método desde javascript, falló sin ningún mensaje de error.Me pregunto si existe algún control de política para evitar que se llame al método java desde javascript.

 <html>
<script language="JavaScript">
function createExcel()
{
    document.excel.createExcel();

    document.excel.setMessage("hello world from js");
}
</script>
<body>
<input type="button" value="Generate Excel" onclick="createExcel()" />
<applet id='applet' name='excel' archive='Office.jar,poi-3.7-20101029.jar' code='com.broadridge.Office.class' width='100' height='100'></applet>
</body>
</html>
¿Fue útil?

Solución

Los métodos de un subprograma de confianza que se invocan mediante JavaScript deben incluirse en un PrivilegedAction y se llama usando uno de los AccessController.doPrivileged(..) .

Acceso al sistema de archivos en espacio aislado

Los JRE del complemento 2 (Oracle 1.6.0_10 + JRE, por ejemplo) ofrecen acceso en espacio aislado al sistema de archivos local mediante JNLP API servicios de archivo (específicamente FileSaveService ). Consulte la demostración del servicio de archivos para ver un ejemplo.

Elemento de applet

Un applet llamado por JS debería declarar que es scriptable en el HTML. En cuanto a obtener ese 'HTML', la mejor manera de escribirlo es utilizando deployJava.js . No solo escribirá el elemento del subprograma de la mejor manera que se conoce actualmente para cada navegador, sino que también comprobará la presencia de JRE (¿está instalado Java?) Y la versión mínima (¿es el JRE la versión mínima necesaria para ejecutar este subprograma?).

Otros consejos

Puede haber varios problemas aquí.

1) Debe utilizar el método de implementación de JavaScript para el subprograma (ver enlace).

2) Si el método que intenta invocar no está en el propio applet-child, primero debe obtener una instancia de la clase en cuestión y luego invocar su método, p.(para la clase Calculadora):

var calculator = mathApplet.getCalculator();
calculator.setNums(numA, numB);

Moor información

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top