2011-03-30 28 views
33

¿Es posible cargar ciertas secuencias de comandos como¿Cargar scripts después de cargar la página?

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

cuando el resto de la página se ha cargado?

Imagine que tengo unos pocos archivos de script más grandes como este que no son necesarios cuando se carga la página. P.ej. Estoy usando la API de Google Maps que solo se utiliza cuando se hace clic en un botón (por lo que no se carga la página).

¿Es posible cargar el resto de la página primero, antes de procesar todas esas etiquetas de script en mi cabeza?

+0

si se enumeran en la cabecera, pero si utilizas algo como yepnope {http://yepnopejs.com/}, puedes cargarlos solo cuando los necesites. – idbentley

Respuesta

33

En jQuery usted podría do this el documento listo

$.getScript("somescript.js", function(){ 
    alert("Script loaded and executed."); 
}); 
+0

¡He aprendido una función útil! – Miron

0

utilizar el método getScript de jQuery! o simplemente intenta poner esta secuencia de comandos al final de la página?

1

Sí, esto es posible al inyectar dinámicamente los archivos JavaScript desde el código. Hay muchas bibliotecas que puede usar: RequireJS, HeadJS etc. Recientemente encontré el documento this que compara muchas bibliotecas de cargadores de JavaScript.

0

Sí, eso es completamente posible. Agregue un evento onLoad="foo();" a su etiqueta <body> y haga que invoque sus scripts. Tendrá que ajustar su JS externo en una función y hacer algo como:

//EXTERNAL JS (jsstuff.js) 

function Mojo() { 
    document.getElementById('snacks').style.visibility = "visible"; 
    alert("we are victorious!"); 
} 

//YOUR HTML 

<html> 
    <head> 
     <script type='text/javascript'></script> 
    </head> 
    <body onLoad='Mojo();'> 
     <div id='snacks'> 
      <img src='bigdarnimage.png'> 
     </div> 
    </body> 
</html> 
11

Es posible. Estaba haciendo algo similar en un sitio intensivo de AJAX, pero estaba cargando la API de Google Charts. Aquí está el código que utilicé para cargar la API de Google Charts cuando se hizo clic en un botón en la página.

function loadGoogleChartsAPI() { 
    var script = document.createElement("script"); 
    // This script has a callback function that will run when the script has 
    // finished loading. 
    script.src = "http://www.google.com/jsapi?callback=loadGraphs"; 
    script.type = "text/javascript"; 
    document.getElementsByTagName("head")[0].appendChild(script); 
} 

function loadGraphs() { 
    // Add callback function here. 
} 

Este utiliza una función de devolución de llamada que se ejecutará cuando el guión se ha cargado.

+0

Maps does: https://developers.google.com/loader/ –

6

¿Nadie ha mencionado esto?

$(window).load(function(){ 
    // do something 
}); 

o

$(window).bind("load", function() { 
    // do something 
}); 
6

simplemente puede agregar en ese archivo de script defer parámetro

<script src="pathToJs" defer></script> 

puede comprobar this cuestión, así

+1

No, esto es incorrecto.El parámetro 'async' especifica que el script se ejecuta cuando está listo, independientemente de qué tan cargada esté la página. 'defer' es probablemente lo que estás buscando. –

+0

gracias por corregir @AlexHolsgrove – nikoss

3
$(document).ready(function() { 
    var ss = document.createElement("script"); 
    ss.src = "somescript.js"; 
    ss.type = "text/javascript"; 
    document.getElementsByTagName("head")[0].appendChild(ss); 
}); 
+0

Bienvenido a SO :) Siempre es mejor agregar una explicación al código que está publicando como respuesta, para que ayude a los visitantes a entender por qué esta es una buena respuesta. – abarisone

-1

a poco permite la página para mostrar antes de cargar la secuencia de comandos, utilice el atributo async:

<script src="//url/to/script.js" async></script> 

Para ocultar la ruleta de carga en el navegador, añada la etiqueta de script después de la carga de la página final:

<script> 
document.addEventListener('DOMContentLoaded', function() { 
    var script = document.createElement('script'); 
    script.src = '//url/to/script.js'; 
    document.getElementsByTagName('body')[0].appendChild(script); 
}); 
</script> 
No
Cuestiones relacionadas