12 enero, 2009

Una implementación de "isArray" y un "getContent" local

Es conocida la problemática que existe en Javascript para algo tan simple como comprobar si una variable es realmente un Array (Matriz/Arreglo). En Perfection Kills proponen una implementación simple de la comprobación de si una variable es un Array que parece más robusta que las que se han usado hasta ahora:

typeof null; // "object"
typeof []; // "object"
var arr = []; 
arr instanceof Array; // true
arr.constructor == Array; // true, pero da problemas entre frames
arr.constructor === Array; // false
typeof myArray.sort == 'function' // si tiene definida la función sort
// finalmente la opción que se ha demostrado más fiable es:
function isArray(o) {
  return Object.prototype.toString.call(o) === '[object Array]'; 
}
Por otro lado, Andrés Nieto ha reescrito una función de CSSGallery.info para que sea independiente y no necesite ninguna librería. Lo que hace esta función es cargar de forma transparente un recurso mediante Ajax, identificando si se trata de un recurso local (file:///archivo) o uno remoto tradicional (http://site/camino/archivo). Resulta muy útil para principiantes cuando descargan algo para probarlo en local.
function get_content(url,update) {
  if ( document.location.protocol == "file:" ) {
    var ifr = document.createElement("iframe");
    ifr.src = url;
    ifr.onload = function() {
 document.getElementById(update).innerHTML = this.contentWindow.document.body.innerHTML;
    }
    document.getElementsByTagName("body")[0].appendChild(ifr);
  } else {
    var ajax = (XMLHttpRequest)?new XMLHttpRequest():new ActiveXObject('Microsoft.XMLHTTP');
    ajax.open('GET', URL);
    ajax.onreadystatechange = function(){
  document.getElementById(update).innerHTML = ajax.responseText;
    };
    ajax.send(null);
  }
}

Publicar un comentario en la entrada

Últimos links en indiza.com