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:
<html>
<head>
<!--
AjaxObject
Este script está disponível para download em :
http://www.hunlock.com/blogs/The_Ultimate_Ajax_Object
-->
<script src='ajaxObject.js' type='text/javascript'></script>
<script>
var processData = function(responseText, responseStatus) {
if (responseStatus!=200) {
alert(responseStatus + ' -- Erro a processar o pedido');
}
document.getElementById('content').innerHTML = responseText;
};
if (typeof netscape != 'undefined' && typeof netscape.security != 'undefined') {
try {
netscape.security.PrivilegeManager.enablePrivilege('UniversalBrowserRead');
}catch (e){
alert("Permission UniversalBrowserRead denied : "+e);
}
}
var myRequest = new ajaxObject('http://www.google.pt/search', processData);
myRequest.update('q='+escape('firebug has a bug'));
</script>
</head>
<body>
<div id="content" style="border: 5px solid black"></div>
</body>
</html>
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?
(o sublinhado é meu)
Unfortunately, there is a bug in Firebug that prevents enablePrivilege from allowing XMLHttpRequests to external domains.
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.

0 respostas até ao momento ↓
Ainda não existe comentários. Pode ser o primeiro preenchendo o formulário em baixo.
Deixe um comentário