Evitar errores de producción debidos a Firebug

Aquellos que usamos Firebug para depurar nuestras aplicaciones, podemos cometer el error de dejar una traza (console.log())y que al subirlo a producción el usuario tenga un error de Javascript. Para evitar esto, podemos incluir en nuestro script lo siguiente:

if(!window.console) {
window.console = {
log: function() {}
}
}

Visto en este ejemplo

SocialHistory.js: conoce los lugares que ha visitado los usuarios de tu web

Interesante script que nos permite saber si un usuario ha visitado alguna página, centrada en sitios sociales tipo Facebook, Digg, … aunque se puede ampliar a cualquier web.
La idea es brillante, se crea un iframe, inserta enlaces a las páginas que deseas saber si ha visitado o no, modifica los estilos para ocultar los enlaces visitados (a:visited {display: none}) y luego pregunta por cada enlace si ha sido visitado o no (el estilo debe ser display: none si ha sido visitado).
No es fiable al 100% pero es bastante efectivo.
Vote! How to Detect the Social Sites Your Visitors Use
Vía / WebAppers

Laboratorio: input password estilo iPhone con jQuery

Una de las cosas que mas me gusta del iPhone/iPod Touch es que cuando estás metiendo una password ves el último carácter que has tecleado.

Por ello he hecho este pequeño plugin para jQuery (inacabado) que realiza la misma función. Muestra la última letra tecleada y oculta el resto. Para conseguirlo lo que he hecho es transformar el input en tipo text y guardar lo que se va tecleando.

$.fn.hidder = function() {
return this.filter(':password').each(function() {
this.config = {
delay: 1,
value: '',
char: '•'
}
this.type = "text";
this.config.value = this.value;
this.value = this.value.replace(/./g, this.config.char);
$(this).bind('keydown', function(evt) {
switch(evt.which) {
case 8:
this.config.value = this.config.value.substring(0, this.config.value.length-1);
this.value = this.value.substring(0, this.value.length-1);
break;
}
});
$(this).bind('keyup', function(evt) {
if (this.value.length > this.config.value.length) {
var last = this.value.substring(this.value.length-1);
this.config.value += last;
this.value = this.value.substring(0, this.value.length-1).replace(/./g, this.config.char)+last;
var elem = this;
setTimeout(function() {elem.value = elem.value.replace(/./g, elem.config.char);}, elem.config.delay*1000);
}
});
});
}

Le faltan muchas cosas por hacer, y fallan otras, por ejemplo tratar el pulsar los cursores, restaurar el valor antes del submit del formulario, ocultar el texto despues del formulario, …

Yo personalmente no lo usaría en mi página ni loco, pero para experimento no está mal.