Frische Sachen, die ich heute Nachmittag den ganzen Nachmittag geschrieben habe
handelt es sich bei boot.js um ein
komprimiertes Kerndateipaket
test.html verweist auf
alle js-Dateien von ad.js, und es besteht eine solche Beziehung:
ad.js->ae.js
ad.js->abc.js
ae.js->abc.js
xnamespace implementiert das synchrone Laden von js-Dateien. Solange die js-Datei gemäß der Spezifikation geschrieben wird, kann using_xnamespace verwendet werden, um sicherzustellen, dass die Bibliotheken, von denen sie abhängt, zuvor geladen werden.
Die einzige Anforderung, die xnamespace für js-Dateien stellt, besteht darin, dass die Datei mit einem unbenannten Funktionsabschluss (function(){ })() umschlossen sein muss. Auch wenn xnamespace nicht verwendet wird, ist dies auch die Praxis vieler hochwertiger Codes getesteter Browser ie6 ie7 ff NetScape Safari
Das Folgende ist der Inhalt von boot.js
für den Browser Opera Swift, der den Test nicht bestanden hat
[Kopieren]Code:
(function(){
var X={};
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)//Rufen Sie den Dateipfad privat basierend auf dem Namespace ab
{
namespace=namespace.split(".");
var file_path=X.file_path;
var i=0;
while((typeof file_path)=="object")
{
file_path=file_path[namespace[i++]];
}
return (file_path);
}
Funktion check_xnamespace(namespace)//Überprüfen Sie, ob der Namespace existiert, falls vorhanden, rufen Sie den Namespace ab
{
namespace=namespace.split(".");
var xnamespace=X;
var i=0;
while(i<namespace.length)
{
if(!xnamespace[namespace[i]])return;
xnamespace=xnamespace[namespace[i++]];
}
xnamespace zurückgeben;
}
function regist_xnamespace(namespace)//Namespace registrieren
{
namespace=namespace.split(".");
var xnamespace=X;
var i=0;
while(i<namespace.length)
{
if(!(xnamespace[namespace[i]]))xnamespace[namespace[i]]={};
//if(typeof xnamespace[namespace[i]]!="object")throw "Namenskonflikt";
xnamespace=xnamespace[namespace[i++]];
}
xnamespace zurückgeben;
}
Funktion using_xnamespace(namespace)//Überprüfen und laden Sie den Namespace
{
//alert();
if(check_xnamespace(namespace))return;
var file_path=getFilePath(namespace);
//alert(file_path);
var scriptElement=document.createElement("script");
scriptElement.src=file_path;
if(isIE)
{
scriptElement.document;
}
anders
{
//alert(document.getElementsByTagName("head")[0]);
scriptElement.onload=function()
{
X.library_queue.run();
}
document.getElementsByTagName("head")[0].appendChild(scriptElement);
if(X.library_queue.push(arguments.callee.caller))
throw „Bibliothek nicht geladen“
}
}
Funktion import_xnamespace(namespace)
{
var xnamespace=get_xnamespace(namespace);
for(var p im xnamespace)
{
if(window[p]==xnamespace[p])continue;
if(window[p]) throw „Namenskonflikt“;
window[p]=xnamespace[p];
}
}
Funktion export_xnamespace(namespace)
{
var xnamespace=get_xnamespace(namespace);
for(var p im xnamespace)
{
if(window[p]==xnamespace[p])window[p]=undefiniert;
}
}
X.file_path={
A:{
B:{
c:"./abc.js"
},
d:"./ad.js",
e:"./ae.js"
}
}
X.library_queue=new Array();
X.library_queue.run=function(){
while(this.length)
{
(this.pop())();
}
}
X.library_queue.push=Funktion(f)
{
for(var i=0;i<diese.länge;i++)
{
if(this[i].toString()==f.toString())return false;
}
this[i]=f;
return true;
}
})();
10.21 2007 stillschweigend aktualisiert: Die Exception- und FilePath-Dateien wurden getrennt