Para resolver su problema específico, logré que su código JavaScript se ejecutara sin ningún error en esta versión:
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 si su código funciona, agregué un alert("bookmarklet loaded");
al final del bookmarklet. Por lo tanto, puede probar y debería, ya que, como lo probé en Firefox 17, vería que aparece un mensaje. Si su código funciona o no funciona, no puedo decirlo, pero, por supuesto, esta no era la pregunta.
Hay algunas cosas que puede tener en cuenta o hacer una transformación de código JavaScript dentro de <script></script>
Etiquetas más fáciles de adoptar para un bookmarklet
- En el código JavaScript normal, una nueva línea puede separar dos comandos. Bookmarklets están en una línea, así que sustituya el salto de línea con un punto y coma ; .
Un ejemplo aqui
Tengamos un ejemplo. Vamos a tener dos fragmentos de código fuente con dos instrucciones:
var anumber=1
var atext="hallo"
Cuando ponga todo en una línea (= haga el salto de línea a espacios en blanco) primero terminará con esto:
var anumber=1 var atext="hallo"
Esto ya no es un código JavaScript válido. Si desea combinar dos instrucciones en una línea, necesita separar / delimitar las dos instrucciones utilizando un punto y coma como este:
var anumber=1; var atext="hallo"
- Envuelva todo lo que codifique en este tipo de cierre:
javascript:(function(){ [...here your code...] })();
Hay bastantes sitios web para investigar la solución. Me gusta aquí .