2011-03-12 9 views

Respuesta

8

Aquí es una función para crear un nuevo elemento de script. Añade un número entero incrementado para hacer que la URL del guión sea única (como sugirió Kon) para forzar una descarga.

 
var index = 0; 
function refreshScript (src) { 
    var scriptElement = document.createElement('script'); 
    scriptElement.type = 'text/javascript'; 
    scriptElement.src = src + '?' + index++; 
    document.getElementsByTagName('head')[0].appendChild(scriptElement); 
} 

Luego, en la consola de Firebug, se le puede llamar como:

 
refreshScript('my_script.js'); 

Tendrá que asegurarse de que el índice en sí no es parte de la secuencia de comandos se vuelve a cargar!

El panel Firebug Net le ayudará a ver si el script se está descargando. El estado de la respuesta debe ser "200 OK" y no "304 No modificado. Además, debe ver el índice anexado en la cadena de consulta.

El panel HTML de Firebug lo ayudará a ver si el elemento script se agregó al encabezado . elemento

ACTUALIZACIÓN:

Aquí está una versión que utiliza una marca de tiempo en lugar de una variable índice Como sugiere @davyM, es un enfoque más flexible:.

 
function refreshScript (src) { 
    var scriptElement = document.createElement('script'); 
    scriptElement.type = 'text/javascript'; 
    scriptElement.src = src + '?' + (new Date).getTime(); 
    document.getElementsByTagName('head')[0].appendChild(scriptElement); 
} 

puntos de Alexei también están bien -establecido.

+0

usaría la hora (new Date(). GetTime()) en lugar de un índice (elimina la necesidad de una variable global). Si actualiza mucho el mismo script, incluso podría crear un bookmarklet. –

+0

@davyM, buena idea. Voy a actualizar. – inkfist

+0

+1. Tenga en cuenta que el script de recarga no actualizará el objeto Evry ya cargado. Puede encontrarse con problemas interesantes en los que se utilizan versiones antiguas de funciones (es decir, devoluciones de llamada/cierres/objetos existentes). –

0

Si está hablando del desafortunado caso de almacenamiento en caché del lado del cliente/navegador de su archivo .js, entonces simplemente puede versionar su archivo .js. Puede:

  • Renombrar el archivo .js en sí (no preferido)
  • actualización incluye la línea para hacer referencia yourfile.js 1, 2 yourfile.js, etc .. Por lo tanto forzando al navegador para solicitar el?? la última versión del servidor. (preferido)
+0

No, no es una cuestión de caché. Deseo actualizar .js * sin * actualizar toda la página. Algo así como cómo puedes editar CSS rápidamente a través de Firebug sin tener que actualizar la página cada vez para probar tus resultados. No exactamente así, porque quiero guardar los cambios en el archivo .js, pero el punto es que no quiero actualizar toda la página. – Susan

+0

Fuera de las prácticas de depuración estándar (por ejemplo, evaluación de expresiones, comprobación de valores, etc.) No sé cómo puedes hacer lo que intentas hacer. Lamentablemente, volver a cargar la página completa es tu mejor opción. – Kon

0

Lamentablemente, tiene que actualizar la página web para ver las ediciones de JavaScript. No hay forma de que sepa editar JavaScript en "tiempo real" y ver el efecto de las ediciones sin una actualización.

Puede usar Firebug para insertar nuevo JavaScript, y hacer cambios en tiempo real a los objetos DOM; pero no puedes editar el JavaScript que ya se ejecutó.

+0

Sé que puede editar css y html a través de Firebug, pero no veo cómo se pueden editar los archivos .js? – Susan

+0

haga clic en "Consola" y pegue su código js en el panel lateral derecho. –

+0

@Susan Disculpa, esa fue una mala elección de palabras; lo que quise decir con eso es que podrías usar la pestaña Consola para escribir tu JS y que eso te muestre los cambios en tiempo real. Edité mi respuesta para ser más específico. – Moses

Cuestiones relacionadas