Des trucs frais que j'ai écrits tout l'après-midi cet après-midi
boot.js est un
package compressé
de fichier principal
test.html fait référence
à tous les fichiers js de ad.js, et il existe une telle relation :
ad.js->ae.js
ad.js->abc.js
ae.js->abc.js
xnamespace implémente le chargement synchrone des fichiers js. Tant que le fichier js est écrit conformément à la spécification, using_xnamespace peut être utilisé pour garantir que les bibliothèques dont il dépend sont chargées avant lui.
La seule exigence de xnamespace pour les fichiers js est que le fichier doit être entouré d'une fermeture de fonction sans nom (function(){ })(). Même si xnamespace n'est pas utilisé, c'est aussi la pratique de nombreux codes de haute qualité. navigateur testé ie6 ie7 ff NetScape Safari
Voici le contenu de boot.js
pour le navigateur Opera Swift qui a échoué au test
[Copie]Code :
(fonction(){
varX={};
window.using_xnamespace=using_xnamespace;
window.regist_xnamespace=regist_xnamespace;
window.check_xnamespace=window.get_xnamespace=check_xnamespace;
window.import_xnamespace=import_xnamespace;
window.export_xnamespace=export_xnamespace;
var isIE=(window.navigator.appName=="Microsoft Internet Explorer");
function getFilePath(namespace)//Obtenir le chemin du fichier en privé en fonction de l'espace de noms
{
espace de noms=espace de noms.split(".");
var file_path=X.file_path;
var je = 0 ;
while((typeof file_path)=="objet")
{
file_path=file_path[espace de noms[i++]];
}
return (chemin_fichier);
}
function check_xnamespace(namespace)//Vérifiez si l'espace de noms existe, s'il existe, récupérez l'espace de noms
{
espace de noms=espace de noms.split(".");
var xnamespace=X;
var je = 0 ;
while(i<espace de noms.longueur)
{
if(!xnamespace[namespace[i]])return;
xnamespace=xnamespace[namespace[i++]];
}
renvoie l'espace de noms x ;
}
function regist_xnamespace(namespace)//Enregistrer l'espace de noms
{
espace de noms=espace de noms.split(".");
var xnamespace=X;
var je = 0 ;
while(i<espace de noms.longueur)
{
if(!(xnamespace[namespace[i]]))xnamespace[namespace[i]]={};
//if(typeof xnamespace[namespace[i]]!="object")throw "Conflit de nom" ;
xnamespace=xnamespace[namespace[i++]];
}
renvoie l'espace de noms x ;
}
fonction using_xnamespace(namespace)//Vérifier et charger l'espace de noms
{
//alerte();
if(check_xnamespace(namespace))return;
var file_path=getFilePath(espace de noms);
// alerte (chemin_fichier);
var scriptElement=document.createElement("script");
scriptElement.src=file_path;
si (estIE)
{
scriptElement.document;
}
autre
{
//alerte(document.getElementsByTagName("head")[0]);
scriptElement.onload=fonction()
{
X.library_queue.run();
}
document.getElementsByTagName("head")[0].appendChild(scriptElement);
si (X.library_queue.push (arguments.callee.caller))
throw "Bibliothèque non chargée"
;
}
fonction import_xnamespace(espace de noms)
{
var xnamespace=get_xnamespace(espace de noms);
pour (var p dans xnamespace)
{
if(window[p]==xnamespace[p])continue;
if(window[p]) throw "Conflit de nom" ;
window[p]=xnamespace[p];
}
}
fonction export_xnamespace(espace de noms)
{
var xnamespace=get_xnamespace(espace de noms);
pour (var p dans xnamespace)
{
if(window[p]==xnamespace[p])window[p]=indéfini;
}
}
X.file_path={
un:{
b : {
c:"./abc.js"
},
d:"./ad.js",
e:"./ae.js"
}
}
X.library_queue=nouveau tableau();
X.library_queue.run=fonction(){
pendant que (cette.longueur)
{
(this.pop())();
}
}
X.library_queue.push=fonction(f)
{
pour(var i=0;i<this.length;i++)
{
if(this[i].toString()==f.toString())return false;
}
ceci[i]=f;
renvoie vrai ;
}
})();
10.21 2007 mis à jour discrètement : séparation des fichiers Exception et FilePath