2011-05-05 21 views
7

posibles duplicados: Include a JavaScript file in a JavaScript file How to include a JavaScript file in another JavaScript file?archivo JavaScript importación en función de JavaScript

¿Cuál es la mejor manera de importar un archivo JavaScript, por ejemplo file.js, en una función de JavaScript()?

Por ejemplo, ¿cuál es la mejor manera de reemplazar la declaración TODO:

function doSomething() { 
    if (xy.doSomething == undefined) { 
     // TODO: load 'oldVersionPatch.js' 
    } 
    ... 
} 

Posiblemente, la mejor solución es la creación de elemento de guión y agregarlo a la página HTML.

  • ¿Es mejor agregar/agregarlo a la cabeza, o al cuerpo (qué se cargará cuando)?
  • ¿Es mejor usar JavaScript o jQuery (qué es más compatible con varios navegadores)?
+0

sí, pero hay han habido muchas respuestas. No estoy seguro de si es mejor agregar el guión al encabezado, cuerpo (lo que se cargará cuando), usar jquery o javascript estándar (lo que es más compatible con el navegador cruzado) –

Respuesta

4

http://api.jquery.com/jQuery.getScript/

o

(function(){ 
    this.__defineGetter__("__FILE__", function() { 
    return (new Error).stack.split("\n")[2].split("@")[1].split(":").slice(0,-1).join(":"); 
    }); 
})(); 

(function(){ 
    this.__defineGetter__("__DIR__", function() { 
    return __FILE__.substring(0, __FILE__.lastIndexOf('/')); 
    }); 
})(); 

function include(file,charset) { 
    if (document.createElement && document.getElementsByTagName) { 
     var head = document.getElementsByTagName('head')[0]; 
     var script = document.createElement('script'); 
     script.setAttribute('type', 'text/javascript'); 
     script.setAttribute('src', __DIR__ + '/' + file); 
     if(charset){ 
      script.setAttribute('charset', charset); 
     } 
     head.appendChild(script); 
    } 
} 
+0

ok, utilicé el estilo jquery: $ .getScript ('xyz.js', function() {}); Gracias. –

1

Muy simplemente, en JavaScript crear un elemento <script>, agregue el atributo src con lo que el URL es y se adhieren a la DOM. Deberias hacer eso.

4
var filename = 'oldVersionPatch.js'; 
    var js = document.createElement('script'); 
    js.setAttribute("type","text/javascript"); 
    js.setAttribute("src", filename); 
    document.getElementsByTagName("head")[0].appendChild(js); 

.. debería hacerlo

1

Usted tiene que hacer su código asíncrono de obtener esto:

var script = document.createElement('script'); 
script.type = 'text/javascript'; 
script.src = yourJavascriptFileLocation; 
script.onload = script.onreadystatechange = function() { 
    if (!script.readyState || script.readyState === 'complete') { 
     /* Your code rely on this JavaScript code */ 
    } 
}; 
var head = document.getElementsByTagName('head')[0]; 
// Don't use appendChild 
head.insertBefore(script, head.firstChild); 
+0

¿por qué no debería usar appendChild? –

+1

si hay un elemento '' en la sección '' que es el último elemento secundario de '', 'appendChild' en IE6 daría como resultado un comportamiento incorrecto, es decir, todo el DOM se agrega al elemento' ':) – otakustay