sexta-feira, 25 de setembro de 2009

Javascript com VBScript

Há dias colocaram-me uma dúvida engraçada :).
Um colega meu tinha o código todo cheio de alerts, e em vez de mostrar a caixa normal que é apresentada no javascript queria apresentar uma MsgBox do VB sem ter que alterar qualquer código.
Após alguns testes cheguei a este resultado:

<script Language="VBScript">
Function vbalert(e)
MsgBox e
End Function
</script>
<script Language="JavaScript">
function alert(e){
vbalert(e);
}
alert('windows');
</script>

O que estamos aqui a fazer é a "redefinir" a função alert do javascript para fazer chamar a função vbalert que neste caso vai despoletar uma MsgBox. Ao invés disso, poderiamos fazer mostrar uma DIV p.e. ou até utilizar o jQuery Dialog (componente do jQuery que desconhecia até então e que um colega me mostrou).

O contrário também é possivel (chamar javascript a partir do vbscript).

Mas surge agora uma questão. Visto que estamos a fazer override duma função javascript, como fariamos para extender a função nativa, isto é, preservar o que ela faz, mas adicionar comportamento nosso, neste caso invocar a nossa msgbox vb?

Aqui vai a solução:

<script language="javascript">
window.alert = function(native) {
return function(e) {
native(e);
vbalert(e);
}
}(window.alert);
<script>

O segredo aqui é o closure...No próximo post, explicarei o conceito do closure que é bastante util no javascript e explica na perfeição o funcionamento desta rotina

Sem comentários: