Eu preciso de uma logica server-side aonde eu pudesse receber requests de diversas paginas e pudesse gerar codigo javascript para essas paginas processarem.
Primeiramente pensei em uma solucao com Java Custom tags pq elas me dariam uma forma pratica de renderizer o javascript e ter o browser automaticamente rodando o codigo, mas o problema e que nem todas as paginas poderiam incluir a Custom tag pq elas nao sao paginas Java.
Alguma outra alternativa? tecnologia para fazer isso ?
O que eu consigo ver seria… com javascript fazer um request para um Servlet/WS Restful que pudesse gerar a resposta XML para mim…
MAs dai eu precisaria ter codigo javascript na pagina para poder fazer o parser e dai de alguma forma rodar o javscript.
Eu quero eliminar adicional logica javscript para montar o js que vem do server, queria que o javascript rodasse ja como resposta do servico como com as Custom Tags… (mime: application/javascript)
Entao…a resposta do meu servico e uma tag javascript
<SCRIPT>
…
</SCRIPT>
Mas esse javascript deve ser gerado de acordo com o client (pagina) que faz a requisicao…
O XML iria conter a minha funcao javscript (mas isso pq eu nao vejo uma outra forma de retornar a funcao javscript que nao seja por XML entende?)
Essa e a minha duvida…
no final, eu quero que a minha funcao JS rode no browser…
preciso enteder como recuperar a funcao js do XML e ja rodar…tipo um parsing automatico seguido da execucao ta tag javascript…sem ter que desenvolver meu proprio codigo javascript for parsing e etc…
Eu juro que ainda não entendi direito o que você quer fazer, mas deixo uma palavrinha ou duas:
XML é bacana, tem bastante parser de XML por aí, mas o que o Javascript gosta mesmo é JSON. Dá uma olhada, não é complicado, acho até mais fácil que XML.
Você conhece uma biblioteca chamada DWR? Eles tem um lance de Ajax bem diferente. Talvez seja o que você precisa para rodar a sua aplicação e “avisar” o browser do cliente (é um lance chamado Piggyback, alguns chamam de Reverse Ajax)
Eu também não entendi a necessidade de enviar script para o client. Seria melhor o servlet lidar apenas com os dados, e um script pronto no lado client processaria esses dados como conveniente.
Os scripts podem ser encapsulados em uma biblioteca que cada desenvolvedor de páginas referencia com
Explique melhor o que você precisa implementar, funcionalmente falando.
cada vez que a uma pagina e carregada, a pagina envia alguns parameters para o componente server-side…
Este componente executa logica complexa que nao poderia ser feita com javascript libraries
ao inves de retornar um XML com dados e fazer o parsing e depois montar o HTML/javascript eu precisaria retornar ja a tag javascript (HTML/js)
preciso rodar a menor quantidade possivel de logica javscript na pagina para evitar problema de processamento (page-loading)…
Entendam que esta logica e particular…este servico foi feito para isso…e considerado um third-party service que nao pode impactar as paginas (processing)…nao levem em considerecao aqui MVC, frameworks and etc… meu servico e como uma Custom tag que escreve HTML na pagina…com a desvatagem de rodar antes da pagina ser carregada no browser…por isso a necessidade de gerar javascript…
Não fica bravo, mas eu não entendi ainda porque o servidor tem que gerar o javascript ao invés de apenas os dados… hehe
Mesmo assim vou dar uma sugestão. É uma solução extremamente simples:
Página:
[code]
Teste
Testando pagina que vai carregar um script do servlet
[/code]
/myapp/script é um caminho que está mapeado para um Servlet.
Ou seja, vai buscar o retorno do servlet e tratar como se fosse um arquivo .js estático.
No código do servlet basta então “cuspir” o javascript que se deseja executar:
Parece que ao incluir dinamicamente no HTML uma tag o browser não processa essa tag. Verifiquei isso com a página de teste abaixo, o que vc tentou fazer não funciona no Firefox nem no IE.
Aproveitando, estou colocando aqui mais uma opção, o comando eval
<html>
<head>
<title>Teste JS Dinamico</title>
<script>
// Contem o codigo javascript a ser executado dinamicamente.
// Seria o bloco de codigo retornado em uma chamada HTTP ao servidor
var codigoScript = "function sayHello() {"
+ " alert('Hello JS');"
+ " } "
+ "sayHello();";
var tagJs = "<script>" + codigoScript + "<" + "/script>";
var tagConteudo = "<span>SOU UMA TAG NORMAL</span>";
// Inclui na DIV uma tag com conteudo comum, apenas para demonstrar que esse conteudo é renderizado
function carregarConteudoNormal() {
alert("inserindo conteudo");
document.getElementById("divConteudoNormal").innerHTML = tagConteudo;
}
// Inclui na DIV uma tag script, para verificar se o seu conteudo é executado
function carregarJSDinamico() {
alert("inserindo script: \n" + tagJs);
document.getElementById("divScript").innerHTML = tagJs;
}
// Executa pedaço de codigo pelo comando eval
function executaEVAL() {
alert("executando eval");
eval(codigoScript);
}
</script>
</head>
<body>
<div id="divConteudoNormal"></div>
<div id="divScript"></div>
<input type="button" value="Carrega Conteudo normal" onclick="carregarConteudoNormal()" />
<input type="button" value="Carrega JS" onclick="carregarJSDinamico()" />
<input type="button" value="Processa JS com EVAL" onclick="executaEVAL()" />
</body>
</html>
O eval realmente não funciona com a tag <script>, apenas com o código javascript propriamente dito.
Para utilizá-lo, seria necessário fazer uma chamada HTTP para http://domain.com/resource.sd?param1=x¶m2=yyy , e depois aplicar o eval sobre a string retornada.
Adicionar a tag script de forma que ela seja executada eu infelizmente não sei como fazer… achei esses links sobre o assunto, veja se resolve: http://unixpapa.com/js/dyna.html
Usei “<” + “/script>” porque se colocasse “</script>” o browser podia acabar se confundindo pensando que eu estava realmente fechando a tag script (aquela que começa lá na linha 4).