Mi situación era diferente. Usé un menú para cargar contenido en un div usando jquery. Para evitar que haya demasiadas secuencias de comandos en la sección del encabezado, utilicé .getscript para cargar el archivo solo si se llamó a ese enlace. Aquí está la solución que surgió para evitar duplicados:
Primero creo una función que fue responsable de cargar el script. Esto es parte del archivo global.js en mi sitio y el archivo global.js está codificado en el encabezamiento:
var loadedScripts=new Array();
function loadScriptFiles(scriptArray){
if($.isArray(scriptArray)){
$.each(scriptArray, function(intIndex, objValue){
if($.inArray(objValue, loadedScripts) < 0){
$.getScript(objValue, function(){
loadedScripts.push(objValue);
});
}
});
}
else{
if($.inArray(script, loadedScripts) < 0){
$.getScript(script, function(){
loadedScripts.push(objValue);
});
}
}
}
Esta toma dos tipos de cargas, ya sea una matriz o un único valor de la escritura. Si se trata de una matriz, recorre cada elemento y lo carga. Si no es una matriz, solo cargará un archivo. Verás esa parte en un minuto.
Piezas importantes: Ver He creado una matriz en el ámbito global (fuera de la función) llamado loadedScripts. Como es parte del archivo global.js, nunca se vuelve a cargar y se puede llamar desde cualquier lugar. Sin embargo, para nuestros propósitos, simplemente comprobar para ver si el nombre del script que se está cargando ya está en la matriz mediante:
if($.inArray(objValue, loadedScripts) < 0){
Dado que la función jQuery InArray devuelve -1 si no se encuentra el valor, sólo continuará si el el valor es menor que 0.Cualquier otra cosa significa que el valor está en la matriz.
Así es como se llama a la función que se utilizará. Coloque este código en cualquier lugar (lo puse en la parte superior) de la página dinámica que se invocará.
<script type="text/javascript">
var scriptArray=new Array();
scriptArray[0]="[REPLACE THIS WITH THE PATH TO THE JS FILE]";
scriptArray[1]="[REPLACE THIS WITH THE PATH TO THE JS FILE]";
loadScriptFiles(scriptArray);
</script>
Si lo hace correctamente, observará que solo se carga una vez.
¿Por qué quiere hacer esto? ¿Estás hablando de almacenamiento en caché? ¿o estás hablando de evaluación condicional? – geocar
gracias por preguntar Quiero hacer esto ya que mi aplicación tiene varios módulos, por así decirlo. Contactos, tareas, etc. No quiero cargar todos los JS a menos que sea necesario. Entonces, si el usuario hace clic en Contactos, entonces quiero cargar el archivo contacts.js, pero si hacen clic y luego vuelvo a hacer clic en Contactos. No quiero recargarlo. ? – AnApprentice
Su navegador ya lo hará debido al almacenamiento en caché. – geocar