Mostrando postagens com marcador javascript. Mostrar todas as postagens
Mostrando postagens com marcador javascript. Mostrar todas as postagens

terça-feira, dezembro 09, 2008

Bookmarklet para Google Reader

Por algumas razões estou utilizando no dia-a-dia o Google Chrome (sim, ele não tem add-ons e é *extremamente* minimalista). Para contornar a falta de uma maneira de adicionar o feed da página atual no leitor de feeds, fiz o seguinte bookmarklet, que pode ser utilizado em qualquer outro browser:



javascript:(function(){function fs(){var r=[];for(var i=0,ls=document.getElementsByTagName('link');i<ls.length;i++)if(ls[i].type in {'application/rss+xml':0,'application/atom+xml':0})r.push(ls[i]);return r}var ls=fs();if(ls.length>0)location.href='http://fusion.google.com/add?feedurl='+encodeURIComponent(ls[0].href);else alert('No feeds available!');})()

Como o engine do Blogger não me deixou criar um link com esse código, vais ter que copiar e criar na mão o bookmarklet na barra de favoritos.

Ah, se não sabe, Control+B mostra a barra de favoritos no Chrome.

domingo, abril 15, 2007

Concordo: IE6 deve morrer

Como o Blogger não suporta Trackback ainda, então vai na mão mesmo:
http://www.tableless.com.br/ie6-deve-morrer

Na última sexta-feira, 13 por coincidência, tive 2 dores de cabeça com o IE6.

Problema #1: um Javascript responsável por salvar alguns dados no servidor:


for (country in countries) { ... }


isso funciona no Firefox, porém o IE acusava um problema. Graças a um debugger de Javascript que tenho instalado, consegui constatar que era esta expressão a culpada, então um amigo falou: "Coloca um var ali na declaração de country". Dito e feito, o correto é:


for (var country in countries) { ... }


Problema #2: tags A com background-image, quando se passava o mouse por cima do link, algumas vezes, acontecia que a imagem desaparecia e aparecia novamente, em inglês flickering. Pesquisando vi que isso já é um bug conhecido do IE6, uma página fazia uma série de teorias explicando o porque daquele bug, outra apenas relatava a solução que foi adotada, a terceira e última foi mais útil, explica que a causa do problema está nos response headers HTTP, mais precisamente no Expires. Como queria uma solução mais rápida e que respondesse na mesma moeda ao IE, optei pela solução que usa um Javascript apenas no IE6, que altera um parâmetro não documentado do browser:

<!--[if IE 6]><script type="text/javascript">
try {
document.execCommand("BackgroundImageCache", false, true);
} catch(err) {}
</script><![endif]-->

Solucionado! Muito melhor que perder tempo² (meu tempo desenvolvendo uma solução para retornar as imagens com o header Expires, e o tempo do processador do servidor depois para servir as imagens através dessa solução e não do procedimento padrão do servidor HTTP).

domingo, abril 08, 2007

Lições relacionadas a Javascript

Trabalhando com Javascript e "Ajax" em um projeto tomei as seguintes lições:

  • Opera 8.5 não lida bem com respostas cujo mime-type é 'application/json', a solução foi atualizar para a 9.0;
  • IE não gosta de vírgulas extra em suas matrizes, por exemplo [1,2,3,], ele interpreta aquela última vírgula como um outro elemento da matriz;
  • Usando as facilidades "Ajax" do jQuery, caso ocorra uma exceção dentro da callback de success, o jQuery irá chamar a callback de error;

sábado, março 24, 2007

JQuery, CSS e ids (X)HTML

Em um projeto que estou trabalhando no momento estou usando o JQuery, porém me deparei com um problema ao tentar utilizar o seu $() com elementos que contenham ids com caracteres como ponto e dois-pontos, que são caracteres válidos em ids.

Preparei um arquivo de testes e postei o problema na lista do JQuery, e em alguns minutos obtive entre as respostas uma que apontava que já existia um bug report para este problema (aqui entra a lição de sempre procurar pelo problema no bug tracker do projeto!), que até agora ainda não foi solucionado, existe uma sugestão de patch que altera a expressão regular do CSS selector do JQuery para uma solução parecida com o que já existe na especificação do CSS...


<style>
#test.x { background-color: green; color: yellow; }
</style>
...
<p id="test.x">P with id 'test.x'.</p>


O código acima não irá funcionar como esperado, ele na verdade seleciona o elemento com id 'test' e classe 'x', para ter o efeito desejado deve-se usar '#test\.x', ou seja, "escapa"-se o ponto, o que informa ao interpretador CSS para cancelar a busca pela classe.

A solução temporária é eu aplicar o patch e compilar a minha própria versão do JQuery...