Pergunta

Estou tentando criar um arquivo do Excel e salvá-lo no sistema de arquivos local usando o miniaplicativo java.Depois de assinar o aplicativo, posso criar o arquivo com êxito invocando diretamente o miniaplicativo.No entanto, quando tento chamar o método de javascript, ele falhou sem nenhuma mensagem de erro.Estou me perguntando se existe algum controle de política para evitar que o método java seja chamado de 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>
Foi útil?

Solução

Os métodos em um miniaplicativo confiável que são chamados usando JavaScript precisam ser agrupados em um PrivilegedAction e chamado usando um dos AccessController.doPrivileged(..) .

Acesso ao sistema de arquivos em sandbox

Plug-in 2 JREs (Oracle 1.6.0_10 + JRE, por exemplo) oferecem acesso em sandbox ao sistema de arquivos local usando o JNLP API serviços de arquivo (especificamente os FileSaveService ). Consulte a demonstração do serviço de arquivo. para obter um exemplo.

Elemento miniaplicativo

Um applet chamado por JS deve declarar que é scriptable no HTML. Quanto a obter esse 'HTML', a melhor maneira de escrevê-lo é usando o deployJava.js . Ele não apenas gravará o elemento do miniaplicativo da melhor maneira conhecida atualmente para cada navegador, mas também a presença do JRE (o Java está instalado?) E a versão mínima (o JRE é a versão mínima necessária para executar este miniaplicativo?) Verificando.

Outras dicas

Pode haver vários problemas aqui.

1) Você deve usar o método de implantação JavaScript para o miniaplicativo (consulte o link).

2) Se o método que você tenta invocar não estiver no próprio miniaplicativo-filho, primeiro você deve obter uma instância da classe em questão e, em seguida, invocar seu método, por exemplo,(para a classe Calculadora):

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

Moor informações

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top