Include en Javascript

Hace un tiempo ya habia publicado un script que incluia archivos javascript y css mediante el DOM, y ahora debido a un proyecto que realize la simplifique un poco, al fin y al cabo lo que se busca es la simplicidad.

La función es la siguiente:

  1. function include(file,opt){
  2.        
  3.         if(file=="") return;
  4.  
  5.         //Genera una id para el archivo con el fin de evitar que se cargue 2 veces.
  6.         idfile = file.replace(location.hostname,"");
  7.         idfile = idfile.replace(location.protocol,"");
  8.         idfile = idfile.replace("//","");
  9.  
  10.         if(document.getElementById(idfile)){ return };
  11.                
  12.         if(typeof opt=="undefined") opt = {};
  13.         if(typeof opt.cache=="undefined") opt.cache = true;
  14.         if(typeof opt.dom=="undefined")  opt.dom = false;
  15.         if(typeof opt.type=="undefined")  opt.type = "";
  16.        
  17.        
  18.         ext = (opt.type!="") ? opt.type : file.substring(file.lastIndexOf(‘.’)+1);
  19.  
  20.         if(!opt.cache){
  21.             var random = new Date().getTime().toString();        
  22.                 if(file.indexOf("?")!=-1) file = file+"&"+random;
  23.                 else file = file+"?"+random;
  24.         }
  25.        
  26.         if(opt.dom){
  27.                 var head = document.getElementsByTagName(‘head’).item(0)       
  28.         }
  29.        
  30.        
  31.         switch(ext){
  32.                 case "css":
  33.                   if(!opt.dom) 
  34.                         document.write(‘<link rel="stylesheet" href="’+file+‘" id="’+idfile+‘" type="text/css"></link>’);
  35.                   else{
  36.                     css = document.createElement(‘link’);
  37.                     css.rel  = ‘stylesheet’;
  38.                     css.href = file;
  39.                         css.type = ‘text/css’;
  40.                         css.id = idfile;
  41.                         head.appendChild(css);                 
  42.                   }                    
  43.                 break;
  44.                
  45.                 case "js":
  46.                  if(!opt.dom){
  47.                         document.write(‘<script type="text/javascript" id="’+idfile+‘" src="’+file+‘"></script>’);
  48.                  }
  49.                  else{
  50.                     script = document.createElement(‘script’);
  51.                     script.src = file;
  52.                         script.type = ‘text/javascript’;
  53.                         script.id = idfile;
  54.                         head.appendChild(script);
  55.                        
  56.                         if(typeof opt.oncomplete!="undefined"){
  57.                                 //Para IE
  58.                             script.onreadystatechange = function () {if (script.readyState == ‘complete’) {if(typeof opt.oncomplete == "function") {eval(opt.oncomplete());}}}
  59.                                 //Para Firefox
  60.                             script.onload = function () {if(typeof opt.oncomplete == "function") {opt.oncomplete();}}
  61.                         }              
  62.                  }
  63.  
  64.                 break;
  65.         }
  66. }

Sintaxis:

include(file [,opt]);

Ej: include(“path/to/archive”);

Parámetros opcionales

  • cache: true | false – Si se especifica false se le añade al final del archivo un numero aleatorio para que no se guarde cache en el navegador
  • dom: true | false – Si se especifica true el archivo se cargará creando un nuevo elemento script o link en el DOM, si es false el archivo se cargará con un document.write
  • type: js | css – este parámetro solo es necesario si el archivo a cargar tiene una extensión diferente a js o css por ej un archivo .php
  • onload: funcion - en el caso de que se cargue un archivo js via DOM es posible especificar una acción al finalizar la carga del archivo.

Su uso es muy sencillo unicamente llamamos a la función pasandole como parametro el archivo que deseamos cambiar. La función include se encargará de identificar si se trata de un archivo JS o CSS y realizará la carga.

La función carga los archivos utilizando el document.write como metodo predeterminado esto es ideal para proyectos en los que puede ir variando los archivos a utilizar.Ejemplo

En ves de esto:

  1. <script src="/path/to/js.js"></script>
  2. <script src="/path/to/js.js"></script>
  3. <script src="/path/to/js.js"></script>
  4. <script src="/path/to/js.js"></script>
  5. <script src="/path/to/js.js"></script>
  6. <script src="/path/to/js.js"></script>

podriamos tener esto:

  1. <src="/path/to/include.js"></script>
  2. <script src="/path/to/librerias.js"> </script>

y en librerias.js llamarias a los include

  1. include("/path/to/archivo1.js");
  2. include("/path/to/archivo2.js");
  3. include("/path/to/archivo3.css");

De esta manera ya no tendriamos que modificar nuestro template para ir añadiendo los scripts si no que podemos definir un solo archivo en el cual incluyeramos los scripts.

Si no deseas cargar los archivos entre <head> y</head> puedes especificar que se cargue el archivo mediante DOM.

  1. include("/path/to/archivo2.js",{dom:true});

En caso de que el archivo a cargar tenga una extensión diferente a js o css tendremos que especificar el tipo de archivo a cargar ejemplo:

  1. include("/path/to/archivo2.php",{type:js,dom:true,cache:false});

Como ven es realmente sencillo el utilizar esta función y para algunos proyectos puede ser algo de mucha utilidad.

Descargar Include.js


Fecha de publicación:  noviembre 14, 2007

Notas Relacionadas

dmedina

Fundador de WebAdictos.com.mx / Ingeniero en Sistemas / Desarrollador Web / Blogger / Estudiante de MGTI / apasionado por la tecnología y sobre todo adicto al internet. Puedes seguirme en Twitter @dmedina

#WEB  #TWITTER     Más Entradas de dmedina ➝
  • Pingback: Incluye tus Archivos JS y CSS Cuando los necesites

  • Pingback: www.programame.net

  • Pingback: Funcion Include con Javascript | frogx.three

  • http://www.devjoker.com aldeamedia
    Interesante , incluyo un enlace a tu articulo en mi página.
  • Pingback: Tutoriales de Photoshop, Illustrator, Ajax, CSS, Javascript

  • http://AmbroXio.blogspot.com Guillermo
    hola me interesa usar esto, y definitivamente no te quiero faltar el respeto ni mucho menos quiero robar tu trabajo, asi que quiero saber que puedo hacer para usarlo ? … esta bajo alguna licencia ? … o solo será cuestión de darte lso créditos y poner un enlace a esta entrada quizas …

    felicidades por el include que ha quedado de pm y espero tu respuesta :-D ..

    saludos.

  • http://www.webadictos.com.mx dmedina
    Hola Guillermo puedes usarlo sin ningún problema. Lo de los créditos y el enlace no es obligación pero si esta en tus manos hacerlo adelante créeme que te lo agradeceré mucho :)

    Saludos,

  • Murasame
    Saludos:

    Increible trabajo, personalmente incluyo en el archivo tu nombre, correo para que cualquier persona que vea el código, sepa que eres tu el autor.

  • Marcel
    Hola Guillermo , te felicito por el trabajo realizado en esta funcion. Tengo una pregunta ya que soy nuevo en esto de la programacion con javascript. Tengo un archivo A que requiere llamar a funciones del archivo B (ambos .js) , en donde y como debo proceder. Te agradezco tu respuesta.
  • http://www.siia.unach.com ttoarell
    que tal…quedo muy en mi pagina asi…no ando cargando todo en la pagina..me ha facilitado la vida…

    gracias de antemao que buena idea….

    suerte que no la necesitas…

  • Matias
    Muy buen trabajo, sobre todos para aquellos proyectos que en los que no se pueda trabajar sobre script de servidor o en los que se necesite incluir variables dinámicas a traves de php pero no se quiera hacer pasar todo el javascript a través del motor de PHP (ahorrando mucho tiempo de proceso).

    Matias

  • Angel
    Hola, felicitaciones por dicho js, ere sun maestor del javascript. Tengo una duda, resulta que al usar esta nueva librería con la demo de la anterior me da un fallo, ya que al darle al insertar el nuevo javascript me borra todo el javascript anterior¿alguna solución?:

    dejo el codigo:

    Demo

    Presione para cargar el archivo JS

    al darle click queda así:

    1alert(“Se cargo el archivo correctamente”);

    ¿alguna solución? un saludo

  • Angel
    Hola, muy buen trabajo el que hiciste, quisiera preguntarte el sisiguente problema:
    he utulizado la demo de la anterior libreria, me carga el js enviado pero me elimina todo lo anterior, es decir, en el head solo queda el script nuevo y no el js include ¿alguna solución? un saludo
  • Pingback: Funciones de PHP en Javascript, PHP.JS

  • cbalcazar82
    Hola, he probado tu función pero aun no consigo cargar con el include archivos .php ; es esta forma correcta de hacerlo?
    ***************************************************************************************

    function verify(ver){
    if(ver){
    // Confirmed message, i.e. clicked on “Yes”
    include(”borrar_cliente.php”,{type:php,dom:true,cache:false});
    }
    }

    ***************************************************************************************
    en “borrar_cliente.php” solo hace un llamado a la tabla m_cliente y borra el cliente.

    una consulta mas si no es mucho pedir; en tu funcion puedo hacer paso de variables?

    include(”borrar_cliente.php?id_cliente=203″,{type:php,dom:true,cache:false});

    o se debe hacer de otra manera?

    gracias.

  • Zzombi
    no funciona con .php

    …..

  • cristian
    esto mejorara el performance de las aplicaciones ???
  • Tiogilito
    Justo lo que llevaba tiempo buscando, no había encontrado la manera de generar un identificador valido, este está muy apañao.

    Gracias.

  • http://garitasoft.com Jimmy Garita
    Hola,
    está super cool y es un alivio para quienes sufrimos sin poder organizar paqueterías de scripts.
    El link está mal porque le falta un “/” despues del nombre de dominio, sería algo asi:
    http://www.webadictos.com.mx/wp-content/uploads/2007/11/include.zip
    Saludos