Hal-hal segar yang saya tulis sepanjang sore tadi
paket terkompresi
file inti
test.html mereferensikan
semua file js dari ad.js, dan ada hubungan seperti itu:
ad.js->ae.js
ad.js->abc.js
ae.js->abc.js
xnamespace mengimplementasikan pemuatan file js secara sinkron. Selama file js ditulis sesuai dengan spesifikasi, using_xnamespace dapat digunakan untuk memastikan bahwa perpustakaan tempat file tersebut dimuat sebelumnya.
Satu-satunya persyaratan yang dimiliki xnamespace untuk file js adalah bahwa file tersebut harus diapit dengan penutupan fungsi yang tidak disebutkan namanya (fungsi(){ })(). Meskipun xnamespace tidak digunakan, ini juga merupakan praktik dari banyak kode berkualitas tinggi browser yang diuji ie6 ie7 ff NetScape Safari
Berikut isi boot.js
untuk browser opera swift yang gagal dalam pengujian
[Salin]Kode:
(fungsi(){
var X={};
window.using_xnamespace=menggunakan_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)//Dapatkan jalur file secara pribadi berdasarkan namespace
{
namespace=namespace.split(".");
var file_path=X.file_path;
var i=0;
while((typeof file_path)=="objek")
{
file_path=jalur_file[namespace[i++]];
}
kembali (jalur_file);
}
function check_xnamespace(namespace)//Periksa apakah namespace ada, jika ada, dapatkan namespace
{
namespace=namespace.split(".");
var xnamespace=X;
var i=0;
while(i<namespace.panjang)
{
if(!xnamespace[namespace[i]])kembali;
xnamespace=xnamespace[namespace[i++]];
}
kembalikan xnamespace;
}
fungsi regist_xnamespace(namespace)//Daftarkan namespace
{
namespace=namespace.split(".");
var xnamespace=X;
var i=0;
while(i<namespace.panjang)
{
if(!(xnamespace[namespace[i]]))xnamespace[namespace[i]]={};
//if(typeof xnamespace[namespace[i]]!="object")throw "Konflik penamaan";
xnamespace=xnamespace[namespace[i++]];
}
kembalikan xnamespace;
}
fungsi menggunakan_xnamespace(namespace)//Periksa dan muat namespace
{
//alert();
jika(check_xnamespace(namespace))kembali;
var file_path=getFilePath(namespace);
//peringatan(jalur_file);
var scriptElement=document.createElement("skrip");
scriptElement.src=file_path;
jika(adalahIE)
{
scriptElement.dokumen;
}
kalau tidak
{
//alert(document.getElementsByTagName("head")[0]);
scriptElement.onload=fungsi()
{
X.library_queue.run();
}
document.getElementsByTagName("head")[0].appendChild(scriptElement);
if(X.library_queue.push(argumen.callee.caller))
lempar "Perpustakaan tidak dimuat";
}
}
fungsi import_xnamespace(namespace)
{
var xnamespace=get_xnamespace(namespace);
untuk(var p di xnamespace)
{
if(jendela[p]==xnamespace[p])lanjutkan;
if(window[p]) throw "Konflik penamaan";
jendela[p]=xnamespace[p];
}
}
fungsi ekspor_xnamespace(namespace)
{
var xnamespace=get_xnamespace(namespace);
untuk(var p di xnamespace)
{
if(jendela[p]==xnamespace[p])jendela[p]=tidak terdefinisi;
}
}
X.jalur_file={
A:{
B:{
c:"./abc.js"
},
d:"./ad.js",
e:"./ae.js"
}
}
X.library_queue=Array baru();
X.library_queue.run=fungsi(){
while(ini.panjang)
{
(ini.pop())();
}
}
X.library_queue.push=fungsi(f)
{
for(var i=0;i<ini.panjang;i++)
{
if(ini[i].toString()==f.toString())mengembalikan salah;
}
ini[i]=f;
kembali benar;
}
})();
10.21 2007 diam-diam diperbarui: memisahkan file Exception dan FilePath