2012-06-03 26 views
19

Tengo un código HTML que carga varios archivos Javascript:archivos de recarga de JavaScript sin actualizar HTML

<script src="assets/js/a.js"></script> 
<script src="assets/js/b.js"></script> 
<script src="assets/js/jquery.min.js"></script> 

Como puedo depurar/probar mi Javascripts en la consola de mi navegador, es posible para volver a cargar estos archivos Javascript sin necesidad para volver a cargar la página HTML completa?

+1

Si está depurando, desea depurar lo que experimenta el usuario. Si solo recarga un script, está comenzando desde un contexto diferente, entonces un usuario lo haría. Así que volver a cargar todo el HTML mientras se depura no es tan malo. –

+0

buena pregunta. pero ya se ha preguntado y respondido. [¿Hay alguna forma de actualizar solo el javascript include mientras se desarrolla?] (Http://stackoverflow.com/questions/5285006/is-there-a-way-to-refresh-just-the-javascript-include-while -doing-development) – naveen

+0

gracias por todas las respuestas y comentarios. – tommi

Respuesta

18

Se puede quitar y volver a añadirlos:

$('script').each(function() { 
    if ($(this).attr('src') !== 'assets/js/jquery.min.js') { 
     var old_src = $(this).attr('src'); 
     $(this).attr('src', ''); 
     setTimeout(function(){ $(this).attr('src', old_src + '?'+new Date()); }, 250); 
    } 
}); 
+8

@Truth - ¡tiene un elemento de script jquery en el código de pregunta! – PitaJ

+1

+1 para negar ese -1. @Truth: 3 no significa todo :) al menos en StackOverflow :) pero PitaJ su código tiene errores. 1. setTimeout no hace nada en este código. 2. Más importante aún, el reemplazo del script no funcionará aquí. solo puede agregar una nueva secuencia de comandos [Sustitución de script src utilizando jquery no ejecutado] (http://stackoverflow.com/q/2226519/17447) – naveen

+0

@naveen - Se corrigió el código – PitaJ

0

Probado con jQuery 2.0.3 y cromo 43

function reloadScript(id) { 

    var $el = $('#' + id); 

    $('#' + id).replaceWith('<script id="' + id + '" src="' + $el.prop('src') + '"><\/script>'); 
} 

Chrome se queja, pero funciona:

XMLHttpRequest sincrónico en el hilo principal está en desuso debido a que uso de sus efectos perjudiciales para la experiencia del usuario final. Para obtener más ayuda, consulte http://xhr.spec.whatwg.org/.

Su etiqueta de secuencia de comandos debe tener una identificación. llamada en la consola:

reloadScript('yourid'); 

no elimina los detectores de eventos, por lo que para, por ejemplo, de clic de botón será ejecutado dos veces si una vez recargado.

0

Basado en la solución de PitaJ.

Recargue todo el javascript en una función. Puede llamar esto desde cualquier lugar que desee.

$('script').each(function() { 
     if ($(this).attr('src') != undefined && $(this).attr('src').lastIndexOf('jquery') == -1) { 
      var old_src = $(this).attr('src'); 
      var that = $(this); 
      $(this).attr('src', ''); 

      setTimeout(function() { 
       that.attr('src', old_src + '?' + new Date().getTime()); 
      }, 250); 
     } 
    }); 
Cuestiones relacionadas