Aproveito a oportunidade para agradecer publicamente ao Joe Hewitt pelo seu excelente Firebug que já me poupou muitas horas de debugging.
Para quem não conhece, o Firebug é um add-on que integra com o Firefox fornecendo uma grande diversidade de ferramentas de desenvolvimento web. Com o Firebug podemos, entre outras coisas:
- inspeccionar e editar HTML;
- inspeccionar, editar e obter métricas de CSS;
- inspeccionar e editar o DOM;
- monitorizar a actividade de rede, especialmente útil para controlar os pedidos Ajax e para medição de tempos de resposta;
- fazer debugging de javascript, com breakpoints, step-by-step debugging, etc.
- aceder à consola interactiva, permitindo fazer logging, visualizar mensagens de erro do browser e executar directamente javascript.
E como se isto não bastasse, saiu recentemente um versão lite que permite executar o Firebug noutros browsers : Internet Explorer, Opera, Safari.
Voltando ao tema, estava a fazer uns testes com Ajax que envolviam ir buscar uma página a outro domínio, processar a resposta para extrair parte da informação e apresentar o conteúdo processado na própria pagina.
O problema é que cada vez que tentava contactar o site remoto, o Firefox queixava-se com o seguinte erro:
uncaught exception: Permission denied to call method XMLHttpRequest.open
Em menos de 5 minutos o Google explicou-me que o problema se devia a uma restrição de segurança implementada no Firefox, que para fazer este tipo de operação o script tinha de ter privilégios de “UniversalBrowserRead” e que isso se conseguia executando algumas linhas de javascript antes de estabelecer a ligação remota.
E foi o que fiz… Eis a versão final do ficheiro:
Quando voltei a testar, realmente o Firefox mostrou um alerta a perguntar se queria dar a tal permissão ao script.
É claro que aceitei, na expectativa de finalmente ver a coisa a funcionar.
Estava enganado, o mesmo erro voltava a aparecer na consola do Firebug.
Na altura, como o que eu estava a testar nem sequer estava directamente relacionado com Ajax, acabei por desistir: mudei o ficheiro .html
para .jsp
, e fiz uma servlet para ir buscar o conteúdo que precisava (com HttpURLConnection
).
O problema ficou assim rapidamente resolvido mas por outro lado esta solução obrigava-me a ter de executar o Tomcat que de outra forma não era preciso.
Ontem, ao fazer restart do Firefox, reparei que o Firebug foi actualizado para a versão 1.0.5 e aproveitei para ir dar uma vista de olhos nas release notes.
Estão desactualizadas e ficaram na versão 1.0.1
Já que lá estava, detive-me um bocado a ler o blog e as faqs e eis que encontro isto:
Why don't XMLHttpRequests work after using permissions manager to enable privileges?
Unfortunately, there is a
bug in Firebug that prevents enablePrivilege from allowing XMLHttpRequests to external domains.
(o sublinhado é meu)
To work around this problem, select "Disable Network Monitoring" from the Options menu in Firebug's Net tab.
Fui buscar a versão antiga do código que tinha feito, segui as instruções, ou seja desliguei o 'Network Monitoring' nas Opções na tab Net e tudo funcionou na perfeição!
Note to Self : Existem outros browsers para além do Firefox e deve-se ler sempre a documentação das APIs ou ferramentas antes de as usarmos.