08th abr 2009
O POG nosso de cada dia #4
8 da noite, você indo embora pra casa, pensando na sua cama, e vem a frase: “Opá, pode dar uma olhada porque está dando esse probleminha no IE6, no site X?”
Você vai ver e não entende o porque está com um erro estranho de javascript: o IE dando aquelas mensagens “Erro na linha 22: objeto é nulo” logo no carregamento da página.
Abre o código, olha, e começa a achar estranho… estava tudo okey, carregando as bibliotecas jQuery e DWR (essa para integrar aplicações Java através de requisições assíncronas),mas aí começava a espirrar o erro de javascript. E nada. E nada.
<script src=”/js/jquery.js” type=”text/javascript” ></script>
<script src=”/js/jquery.rules.js” type=”text/javascript” ></script>
<script type=”text/javascript” src=”/dwr/engine.js”></script>
<script type=”text/javascript” src=”/dwr/util.js”> </script>
Percebi que no javascript, $(document).ready() – da jQuery – funcionava, mas dentro dele nada mais funcionava. Tentava acessar, por exemplo, $.browser para saber qual o browser, e nada.
2 horas testando, mudando coisas, procurando documentação, e nada.
No momento de desespero, veio o insight: é algum conflito entre a jQuery e o DWR. Me lembrei de muitas vezes que tive conflitos entre bibliotecas: TinyMCE com Prototype, por exemplo.
A solução? Inverter a ordem de chamada.
<script type=”text/javascript” src=”/dwr/engine.js”></script>
<script type=”text/javascript” src=”/dwr/util.js”> </script>
<script src=”/js/jquery.js” type=”text/javascript” ></script>
<script src=”/js/jquery.rules.js” type=”text/javascript” ></script>
Voi-lá! Funcionou.
Porque? Sem idéia…

Nossa…
Essa doeu hein, rsrs.
[]‘s
As possíveis soluções mais simples são sempre as que eu testo primeiro. Mesmo que eu não tenha razão nenhuma para achar que aquilo resolve o problema eu testo, porque custa pouco tempo mesmo. É o famoso “por desencargo de consciência”.
Já passei por esse caso que você descreveu e trocar a ordem de chamada também resolveu meu problema. Acho que deve ter alguma coisa a ver com a forma que o IE cria os objetos, já li em algum lugar que ele deixa isso por último e que portanto podemos estar referenciando métodos e objetos que ainda não existem (WTF!) para o interpretador.
Enfim, maluquice de programadores da Microsoft, provavelmente crentes de que estavam otimizando alguma coisa…
Então, quando vi o problema lá do TinyMCE com a Prototype, existia uma explicação na documentacão da Prototype.
Mas, nesse caso ae, nada falando na jQuery, nada no DWR… bizarro demais!
Da próxima vez, vou mesmo fazer as coisas mais simples, mesmo que não tenham sentido. Pois é assim que o IE é… hehe
Ahh nem chega a ser um POG, pelo contrário, é uma bela dica, as vezes as pessoas nem pensam em mudar a ordem das chamadas! (eu também só lembro depois que perdi horas tentando outras coisas ¬¬)
@yogodoshi nossa, pra mim é POG total ficar mudando aleatoriamente as coisas de lugar pra ver se funcionam, no desespero.
Mas, ainda vou pegar um dia e tentar entender onde estava o conclito! hehe
[]s!
[...] [...]
[...] O POG nosso de cada dia #4 (6) Diversos nenhum [...]