Domanda

Sto provando a creare un file Excel e a salvarlo nel file system locale utilizzando l'applet java.Dopo aver firmato l'applicazione, posso creare correttamente il file invocando direttamente l'applet.Tuttavia, quando provo a chiamare il metodo da javascript, non è riuscito senza alcun messaggio di errore.Mi chiedo se esista un controllo delle policy per impedire che il metodo java venga chiamato da 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>
È stato utile?

Soluzione

I metodi in un'applet attendibile che vengono richiamati utilizzando JavaScript devono essere inseriti in un PrivilegedAction e chiamato utilizzando uno dei AccessController.doPrivileged(..) varianti.

Accesso al file system in modalità sandbox

Plug-in 2 JRE (Oracle 1.6.0_10 + JRE per esempio) offrono l'accesso in modalità sandbox al file system locale utilizzando API JNLP (in particolare FileSaveService ). Guarda la demo del servizio file per un esempio.

Elemento applet

Un'applet chiamata da JS dovrebbe dichiarare di essere scriptable nell'HTML. Per quanto riguarda l '"HTML", il modo migliore per scriverlo è utilizzare deployJava.js . Non solo scriverà l'elemento applet nel modo migliore attualmente noto per ciascun browser, ma controlla la presenza di JRE (è installato Java?) E la versione minima (JRE è la versione minima necessaria per eseguire questa applet?).

Altri suggerimenti

Potrebbero esserci diversi problemi qui.

1) È necessario utilizzare il metodo di distribuzione JavaScript per l'applet (vedere il collegamento).

2) Se il metodo che cerchi di invocare non è nell'applet-child stesso, devi prima ottenere un'istanza della classe in questione e poi invocare il suo metodo, ad es.(per la classe Calcolatrice):

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

Moor informazioni

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top