Zona J

Zona J header image 2

O Bug do Firebug

27 de Abril de 2007 às 21:50 por Ricardo Antunes · Sem Comentários ·

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?


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.

Tags: Ferramentas

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

XHTML: Pode usar estas tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>