Estaba buscando una respuesta a esta pregunta y tenía mis propios problemas. Encontré un par de soluciones en varios lugares y las reuní en mi propia respuesta preferida.
function exploreFolder(folderURL,options){
/* options: type explaination
**REQUIRED** callback: FUNCTION function to be called on each file. passed the complete filepath
then: FUNCTION function to be called after loading all files in folder. passed the number of files loaded
recursive: BOOLEAN specifies wether or not to travel deep into folders
ignore: REGEX file names matching this regular expression will not be operated on
accept: REGEX if this is present it overrides the `ignore` and only accepts files matching the regex
*/
$.ajax({
url: folderURL,
success: function(data){
var filesLoaded = 0,
fileName = '';
$(data).find("td > a").each(function(){
fileName = $(this).attr("href");
if(fileName === '/')
return; //to account for the (go up a level) link
if(/\/\//.test(folderURL + fileName))
return; //if the url has two consecutive slashes '//'
if(options.accept){
if(!options.accept.test(fileName))
//if accept is present and the href fails, dont callback
return;
}else if(options.ignore)
if(options.ignore.test(fileName))
//if ignore is present and the href passes, dont callback
return;
if(fileName.length > 1 && fileName.substr(fileName.length-1) === "/")
if(options.recursive)
//only recurse if we are told to
exploreFolder(folderURL + fileName, options);
else
return;
filesLoaded++;
options.callback(folderURL + fileName);
//pass the full URL into the callback function
});
if(options.then && filesLoaded > 0) options.then(filesLoaded);
}
});
}
Entonces se le puede llamar así:
var loadingConfig = {
callback: function(file) { console.log("Loaded file: " + file); },
then: function(numFiles) { console.log("Finished loading " + numFiles + " files"); },
recursive: true,
ignore: /^NOLOAD/,
};
exploreFolder('/someFolderURL/', loadingConfig);
En este ejemplo se va a llamar a esa llamada de retorno en cada archivo/carpeta en la carpeta especificada excepto para los que se inician con NOLOAD
. Si realmente quieres cargar el archivo en la página, puedes usar esta otra función de ayuda que desarrollé.
function getFileExtension(fname){
if(fname)
return fname.substr((~-fname.lastIndexOf(".") >>> 0) + 2);
console.warn("No file name provided");
}
var loadFile = (function(filename){
var img = new Image();
return function(){
var fileref,
filename = arguments[0],
filetype = getFileExtension(filename).toLowerCase();
switch (filetype) {
case '':
return;
case 'js':
fileref=document.createElement('script');
fileref.setAttribute("type","text/javascript");
fileref.setAttribute("src", filename);
break;
case "css":
fileref=document.createElement("link");
fileref.setAttribute("rel", "stylesheet");
fileref.setAttribute("type", "text/css");
fileref.setAttribute("href", filename);
break;
case "jpg":
case "jpeg":
case 'png':
case 'gif':
img.src = filename;
break;
default:
console.warn("This file type is not supported: "+filetype);
return;
}
if (typeof fileref !== undefined){
$("head").append(fileref);
console.log('Loaded file: ' + filename);
}
}
})();
Esta función acepta un JS | CSS | (imagen común) archivo y lo carga. También ejecutará los archivos JS. La llamada completo que deba llevarse a cabo en el script para cargar todas las imágenes y * hojas de estilo y otros guiones podría tener este aspecto:
loadingConfig = {
callback: loadfile,
then: function(numFiles) { console.log("Finished loading " + numFiles + " files"); },
recursive: true,
ignore: /^NOLOAD/,
};
exploreFolder('/someFolderURL/', loadingConfig);
Funciona increíblemente!
Creo que esta es la única manera de hacer lo que el OP quiere sin secuencias de comandos del lado del servidor.Pero estoy de acuerdo, es mejor evitarlo. – harpo
Me gusta la Opción # 3 y estoy de acuerdo en que no es una buena opción. Sin embargo, me gustaría que funcione primero :) Entonces, ¿cómo usaría '.getScript()' para obtener * todos * los archivos en el directorio? ¿Puedes proporcionar algún código? – Hristo
Hristo, solo quería decir que podría tener una llamada getScrip() para cada archivo JavaScript en el directorio, luego agregar una nueva entrada cada vez que se agregue un nuevo archivo al directorio. –