Para resolver seu problema específico, consegui que seu código JavaScript fosse executado sem qualquer erro nesta versão:
javascript:(function(){function text(){this.type="text"};function password(){this.type="password"};function addHandlers(){var e=false;var t=document.evaluate("//input[@type='password']",document,null,6,null);for(var n=t.snapshotLength-1,r;r=t.snapshotItem(n);n--){if(!e){r.addEventListener("mouseover",text,false);r.addEventListener("mouseout",password,false)}else{r.addEventListener("focus",text,false);r.addEventListener("blur",password,false)}}};addHandlers();alert("bookmarklet loaded");})();
Para ver se seu código funciona, adicionei um alert("bookmarklet loaded");
no final do bookmarklet. Então você pode tentar e deve - desde que eu testei no Firefox 17 - ver como resultado uma caixa de mensagem aparece. Se o seu código funciona ou não funciona, não posso dizer, mas é claro que essa não é a questão.
Há algumas coisas que você pode ter em mente ou tornar a transformação do código JavaScript em <script></script>
tags mais fácil de ser adotada para um bookmarklet
- No código JavaScript normal, uma nova linha pode separar dois comandos. Bookmarklets estão em uma linha, então substitua o linebreak por um ponto-e-vírgula ; .
Um exemplo aqui
Vamos dar um exemplo. Vamos ter dois snippets de código fonte com duas instruções:
var anumber=1
var atext="hallo"
Quando colocar tudo em uma linha (= fazer o linebreak para espaços em branco) você vai acabar com isso:
var anumber=1 var atext="hallo"
Este não é mais um código JavaScript válido. Se você quer combinar duas instruções em uma linha, você precisa separar / delimitar as duas instruções usando um ponto-e-vírgula como este:
var anumber=1; var atext="hallo"
- Envolva todo o código nesse tipo de fechamento:
javascript:(function(){ [...here your code...] })();
Existem alguns sites para investigar a solução. Como aqui .