เรื่องใหม่ๆ ที่ฉันเขียนตลอดบ่ายวันนี้
แพ็คเกจบีบอัด
ไฟล์หลัก
test.html อ้างอิง
ไฟล์ js ทั้งหมดของ ad.js และมีความสัมพันธ์ดังนี้:
ad.js->ae.js
ad.js->abc.js
ae.js->abc.js
xnamespace ใช้การโหลดไฟล์ js แบบซิงโครนัส ตราบใดที่ไฟล์ js ถูกเขียนตามข้อกำหนด สามารถใช้ _xnamespace เพื่อให้แน่ใจว่าไลบรารีที่ขึ้นอยู่กับนั้นถูกโหลดก่อนหน้านั้น
ข้อกำหนดเดียวที่ xnamespace มีสำหรับไฟล์ js คือไฟล์นั้นจะต้องปิดล้อมด้วยการปิดฟังก์ชันที่ไม่มีชื่อ (function(){ })() แม้ว่าจะไม่ได้ใช้ xnamespace แต่นี่ก็เป็นวิธีปฏิบัติของโค้ดคุณภาพสูงจำนวนมากเช่นกัน ทดสอบเบราว์เซอร์ ie6 ie7 ff NetScape Safari
ต่อไปนี้เป็นเนื้อหาของ boot.js
สำหรับเบราว์เซอร์ opera Swift ที่ไม่ผ่านการทดสอบ
[คัดลอก]รหัส:
(function(){
วาร์ 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");
ฟังก์ชัน getFilePath(namespace)//รับพาธของไฟล์แบบส่วนตัวตามเนมสเปซ
-
เนมสเปซ=เนมสเปซ.แยก(".");
var file_path=X.file_path;
วาร์ i=0;
ในขณะที่((typeof file_path)=="วัตถุ")
-
file_path=file_path[เนมสเปซ[i++]];
-
กลับ (file_path);
-
ฟังก์ชั่น check_xnamespace(namespace)//ตรวจสอบว่ามีเนมสเปซอยู่หรือไม่ หากมีอยู่ ให้รับเนมสเปซ
-
เนมสเปซ=เนมสเปซ.แยก(".");
var xnamespace=X;
วาร์ i=0;
ในขณะที่(i<namespace.length)
-
if(!xnamespace[namespace[i]])กลับมา;
xnamespace=xnamespace[เนมสเปซ[i++]];
-
ส่งคืน xnamespace;
}
ฟังก์ชัน regist_xnamespace(เนมสเปซ)//ลงทะเบียนเนมสเปซ
{
เนมสเปซ=เนมสเปซ.split(".");
var xnamespace=X;
วาร์ i=0;
ในขณะที่(i<namespace.length)
-
if(!(xnamespace[เนมสเปซ[i]]))xnamespace[เนมสเปซ[i]]={};
//if(typeof xnamespace[namespace[i]]!="object")throw "การตั้งชื่อขัดแย้งกัน";
xnamespace=xnamespace[เนมสเปซ[i++]];
-
ส่งคืน xnamespace;
-
ฟังก์ชั่นusing_xnamespace(namespace)//ตรวจสอบและโหลดเนมสเปซ
-
//alert();
if(check_xnamespace(เนมสเปซ))กลับมา;
var file_path=getFilePath(เนมสเปซ);
//แจ้งเตือน(file_path);
var scriptElement=document.createElement("สคริปต์");
scriptElement.src=file_path;
ถ้า(คือIE)
-
scriptElement.เอกสาร;
-
อื่น
-
//alert(document.getElementsByTagName("head")[0]);
scriptElement.onload=ฟังก์ชั่น()
-
X.library_queue.run();
-
document.getElementsByTagName("head")[0].appendChild(scriptElement);
ถ้า (X.library_queue.push (arguments.callee.caller))
โยน "ไม่ได้โหลดไลบรารี"
;
-
ฟังก์ชั่น import_xnamespace (เนมสเปซ)
-
var xnamespace=get_xnamespace(เนมสเปซ);
สำหรับ (var p ใน xnamespace)
-
ถ้า (หน้าต่าง [p]==xnamespace[p]) ดำเนินการต่อ;
if(window[p]) โยน "ความขัดแย้งในการตั้งชื่อ";
หน้าต่าง[p]=xเนมสเปซ[p];
-
}
ฟังก์ชันexport_xnamespace(เนมสเปซ)
-
var xnamespace=get_xnamespace(เนมสเปซ);
สำหรับ (var p ใน xnamespace)
-
ถ้า(หน้าต่าง[p]==xnamespace[p])หน้าต่าง[p]=ไม่ได้กำหนด;
-
-
X.file_path={
ก:{
ข:{
ค:"./abc.js"
-
ง:"./ad.js",
อี:"./ae.js"
-
-
X.library_queue=อาร์เรย์ใหม่();
X.library_queue.run=function(){
ในขณะที่ (this.length)
-
(this.pop())();
-
-
X.library_queue.push=ฟังก์ชั่น(ฉ)
-
สำหรับ (var i=0;i<this.length;i++)
-
if(this[i].toString()==f.toString())ส่งคืนเท็จ;
-
นี้[i]=f;
กลับเป็นจริง;
-
-
10.21 2007 อัปเดตอย่างเงียบๆ: แยกไฟล์ Exception และ FilePath