2011-03-08 22 views
18

tengo este código:¿Cómo cargo un archivo javascript dinámicamente?

<script type="text/javascript"> 
    function js() { 
     var getJs = document.getElementById("jogo"); 

     if (JS == true) { //if button JS is pressed - it is correct? 

      < script type = "text/javascript" 
      src = "file1.js" > 


     } else < script type = "text/javascript" 
     src = "file2.js" > 
</script> 
} 
</script> 

no funciona. Di dos botones, si se presiona el primero, debe cargarse file1.js. En caso de que se presione el segundo, se debe cargar file2.js.

¿Cómo puedo hacer eso?

+0

que tiene que hacer una eval – kjy112

+0

lo quieres decir con eval? gracias – user455318

+0

'if (JS == true)' significa que se presiona, simplemente significa que el elemento existe en el DOM y por qué no solo incluye todo el script y luego llama a la función apropiada en función de la existencia del JS – slier

Respuesta

45

No se puede incrustar en HTML Javascript en esa forma. Básicamente, lo que desea es incrustar un elemento de script, apuntando a un determinado archivo javascript al hacer clic en un botón. Eso se puede hacer con la combinación de eventos con DOM:

<script type="application/javascript"> 
function loadJS(file) { 
    // DOM: Create the script element 
    var jsElm = document.createElement("script"); 
    // set the type attribute 
    jsElm.type = "application/javascript"; 
    // make the script element load file 
    jsElm.src = file; 
    // finally insert the element to the body element in order to load the script 
    document.body.appendChild(jsElm); 
} 
</script> 
<button onclick="loadJS('file1.js');">Load file1.js</button> 
<button onclick="loadJS('file2.js');">Load file2.js</button> 
+0

gracias, es lo que necesito . – user455318

+6

Agregue nota que las funciones del archivo javascript cargado no están disponibles inmediatamente después de llamar a "document.body.appendChild (jsElm);", pero hay un evento jsElem.onload que señala cuando js está listo. – pera

+0

¿Qué hay de usar 'document.write (unescape ("% 3Cscript src = 'file.js' type = 'text/javascript'% 3E% 3C/script% 3E "));' – Ithar

8

Prueba esto en el tamaño: Dynamically Load JS

function loadjscssfile(filename){ 
    var fileref=document.createElement('script') 
    fileref.setAttribute("type","text/javascript") 
    fileref.setAttribute("src", filename) 
if (typeof fileref!="undefined") 
    document.getElementsByTagName("head")[0].appendChild(fileref) 
} 

loadjscssfile("myscript.js") //dynamically load and add this .js file 
+0

No utiliza el parámetro 'nombre de archivo' en esta función, por lo que no funcionaría ... 5 años más tarde comentario :-) Buen enlace aunque – Ryan

4

JavaScript:

function loadScript(url) 
{ 
    document.body.appendChild(document.createElement("script")).src = url; 
} 
function loadDefaultScript() 
{ 
    loadScript("http://mysite.com/file1.js"); 
} 
function loadAlternateScript() 
{ 
    loadScript("http://mysite.com/file2.js"); 
} 

HTML:

<input type="button" onclick="loadAlternateScript()" value="Alternate" /> 
<input type="button" onclick="loadDefaultScript()" value="Default" /> 
+1

No olvide establecer el parámetro 'tipo'. –

+2

El atributo 'type' es opcional en HTML5. – gilly3

+5

El servidor es la fuente autorizada para el tipo de mime. El atributo de tipo siempre se ignora, no solo para HTML5. No hay ventaja de incluirlo. En realidad es una desventaja porque es engañoso. –

0

Se puede usar esta función de esto funcionará perfectamente

function loadjscssfile(filename, filetype){ 
if (filetype=="js"){ //if filename is a external JavaScript file 
    var fileref=document.createElement('script') 
    fileref.setAttribute("type","text/javascript") 
    fileref.setAttribute("src", filename) 
} 
else if (filetype=="css"){ //if filename is an external CSS file 
    var fileref=document.createElement("link") 
    fileref.setAttribute("rel", "stylesheet") 
    fileref.setAttribute("type", "text/css") 
    fileref.setAttribute("href", filename) 
} 
if (typeof fileref!="undefined") 
    document.getElementsByTagName("head")[0].appendChild(fileref) 
} 

loadjscssfile("myscript.js", "js") //dynamically load and add this .js file 
loadjscssfile("javascript.php", "js") //dynamically load "javascript.php" as a JavaScript file 
loadjscssfile("mystyle.css", "css") ////dynamically load and add this .css file 
+0

Puede consultar el enlace: [respuesta] (https://stackoverflow.com/questions/40808425/how-load-and-use-dynamically-javascript/45489130 # 45489130) – asmmahmud

0

Via Jquery:

var getJSfile = function(src) { 
      var jsfile = $("<script type='text/javascript' src='"+src+"'>"); 
      $("head").append(jsfile); 
     }; 

    getJSfile ("home.js"); 
+0

puede ver el enlace: [respuesta] (https://stackoverflow.com/questions/40808425/how-load-and-use -dynamically-javascript/45489130 # 45489130) – asmmahmud

Cuestiones relacionadas