Posts Tagged ‘ Javascript

Cuando usar Flash para hacer un sitio web?

flashLas ventajas y desventajas de usar Flash para hacer un sitio web son ampliamente conocidas. Sin embargo, muchas veces no se hace un buen uso de esta aplicacion de Adobe. Esto sucede porque no se sabe cuando usarla o por lo que se cree saber, es decir algunos mitos:

Un sitio en Flash es contraproducente para el posicionamiento (SEO)

Esto no es siempre así. Google ya puede leer muy bien el contenido estático de un archivo .swf y lo indexa sin problemas. Por otra parte, se puede compensar la indexación con otras técnicas como link building. Existen muchas páginas hechas en flash que rankean mejor que las hechas en HTML.

Para tener animaciones hay que hacer la página en Flash

En principio dependerá del tipo de animación que se quiera lograr. En muchos casos, transiciones o animaciones disparadas por eventos del mouse pueden ser logradas utilizando javascript. Incluso, se pueden lograr muy fácilmente si se usa alguna librería o framework como jQuery.

Entonces, derribados estos mitos, estos son, a mi entender, los criterios a tener en cuenta para decidir sobre la utilización de Flash:

Manejo de vectores

Una de las caracteristicas más importantes de Flash es su capacidad de manejar vectores. Todo dibujo o animación hecha en vectores tendrá mucha mejor calidad y menor tamaño que el uso de imágenes con mapas de bits.

Animaciones complejas

Cualquier animación que requiera técnicas complejas no será fácilmente lograda con Javascript. De hecho, tal vez es imposible hacerlo. En estos casos, es necesario el uso de Flash para construir la página web.

Dispositivos móviles

Si se apunta a un público que navega utilizando dispositivos móviles como el iPhone, hay que tener en cuenta que estos no tienen el plugin de Flash y, por lo tanto, no podrán ver la página.

Así, si un sitio no tiene animaciones complejas ni imágenes vectoriales, no hay necesidad de usar Flash y tal vez sea mucho más ventajoso hacer la página en HTML.

Javascript: obtener estilos tal cual son mostrados

Existe una forma de obtener los estilos de un elemento del DOM en Javascript tal cual son mostrados por el navegador. Como pasa usualmente, Firefox, Opera, Chrome y Safari lo hacen de una forma e Internet Explorer de otra.

En el blog de Robert Nyman encuentro el siguiente código:

function getStyle(oElm, strCssRule){
var strValue = "";
if(document.defaultView && document.defaultView.getComputedStyle){
strValue = document.defaultView.getComputedStyle(oElm,"")

.getPropertyValue(strCssRule);
}
else if(oElm.currentStyle){
strCssRule = strCssRule.replace(/\-(\w)/g, function (strMatch, p1){
return p1.toUpperCase();
});
strValue = oElm.currentStyle[strCssRule];
}
return strValue;
}

La función getComputedStyle (todos los navegadores menos IE) devuelve un objeto con los todos los estilos que tiene el elemento oElm pasado por parametro.

En el caso de IE, currentStyle tiene los estilos en mayusculas, por lo que es necesaria la conversión a las mismas.

En mi caso, probando en Firefox 3 en Ubuntu, getPropertyValue me devolvía el valor de la propiedad que buscaba vacio. Corroboré que la misma existía y tenía un valor distinto de vacio.

Para solucionarlo, usé el getter de las propiedades del objeto de estilos (reemplazando la línea correspondiente en el código anterior):
str = "strValue = document.defaultView.getComputedStyle(oElm, '')."+strCssRule;
eval(str);

Supongo que esta forma también funciona en versiones anteriores de Firefox.

Google hostea frameworks de Javascript

Google hostea las librerías de Javascript open source más populares y permite a los desarrolladores cargarlas desde sus servidores. Así, se ofrece evitar el hosteo de estos frameworks, con las ventajas que esto implica (actualizaciones, velocidad, bandwidth).

El AJAX libraries API de Google permite cargar jQuery, Prototype, Script.aculo.us, MooTools, Dojo en sus diferentes versiones estables, permitiendo al desarrollador elegir la versión que desea. Estas librerías se mantendrán siempre actualizadas, corrigiendo posibles bugs sin que el usuario tenga que preocuparse por esto.

Una vez que sale un nuevo release estable, Google lo instala y se compromete a hostearlo indefinidamente. Su arquitectura de servidores permitirá recibir pedidos de miles de usuarios sin ningún problema.

Doctype: Google incorpora enciclopedia sobre estándares de Open Web

Google lanzó un nuevo producto realmente interesante: Google Doctype. Definido según su creador, Doctype es “una enciclopedia para desarolladores web para desarolladores web”.

Armado en forma de Wiki, éste proyecto pretende documentar todos los estándares web de lenguajes abiertos (como Javascript, CSS, HTML, etc.). Puede ser editado y comentado por cualquiera que posea una cuenta en Google (o Gmail).

También tiene una versión en español, aunque no tan completa de cada tema.

http://code.google.com/doctype/

TextArea en DesignMode no permite escribir

Muchas veces no alcanza con poner al atributo designMode en “on” para hacer que un textarea sea editable por el usuario y así poder dar estilos al texto ingresado. El problema es que cuando ese textarea esta completamente vacio, es decir: innerHTML = ”, al hacer click sobre el mismo no aparece el cursor y no es posible escribir en el mismo.

Para evitar esto, hay que hacer que el textarea contenga algo. Si se desea que sea “invisible”, alcanzará con colocar un break: innerHTML = ‘<br>’

split() no es cross-browser

Haciendo un debug a un script Javascript con el método split(), note que no se comporta de la misma forma en Firefox que en IE.

Al parecer, si ejecuta este código:

texto = “lorem ipsum dolor sit amet,”;
arregloNuevo = texto.split(“,”);

IE devolverá: arregloNuevo = ["lorem ipsum dolor sit amet"]
Firefox, en cambio: arregloNuevo = ["lorem ipsum dolor sit amet", ""]

O sea que, al parecer, IE omite la última cadena si esta está vacia.

Prototype – Creando métodos a objetos integrados en el lenguaje

Muchas veces, al programar en actionscript o javascript, se necesita utilizar metodos que no estan declarados en los objetos que estan integrados en el lenguaje. Por ejemplo:

  • un método trim para los strings en javascript que permita eliminar los espacios en blanco al final de una linea;
  • un método tint para un color en flash que permita asignar tinte a los movie clips mediante actionscript.

Para esto se usa la propiedad prototype (Prototype tambien es un framework para javascript – AJAX). Esta propiedad permite crear métodos nuevos a objetos, ya sea declarados por el programador o integrados en el lenguaje.

Su uso es bastante simple:

String.prototype.trim = function(){
val = this;
while (val.substr(val.length - 6) == " "){
val = val.substr(0,val.length-6);
}
return val;
}

Ahi se está creando en javascript un método trim para los Stings. Para utilizarlo sólo hay que usarlo como cualquier otro método: mi_cadena.trim();

en Flash:

Color.prototype.setTint = function(r, g, b, amount) {
var percent = 100-amount;
var trans = new Object();
trans.ra = trans.ga=trans.ba=percent;
var ratio = amount/100;
trans.rb = r*ratio;
trans.gb = g*ratio;
trans.bb = b*ratio;
this.setTransform(trans);
};

Así, se puede crear un objeto color, asociado a un movie clip, para luego poder darle el tinte correspondiente:

nuevoColor = new Color (mi_MC);
nuevoColor.setTint(159,202,1,34);

error: argumento no válido (IE – Javascript/Estilos)

Otro error que da Internet Explorer y no así Firefox:

document.getElementById(‘opciones’).style.height = 70px;

Al leer esa línea, Internet Explorer hace un break y muestra que hay un error, preguntando si se lo quiere depurar.

La solución: cambiar .height por .Height (?). Increiblemente funciona. Pero lo más extraño es que ese error y ese cambio lo tuve que hacer sólo en esa línea, habiendo, antes y después, líneas similares con el mismo .style.height