오늘 오후 내내 내가 쓴 신선한 글들
boot.js가 핵심 파일
압축 패키지
인 예에서
test.html은
ad.js의 모든 js 파일을 참조하며 다음과 같은 관계가 있습니다.
ad.js->ae.js
ad.js->abc.js
ae.js->abc.js
xnamespace는 js 파일이 사양에 따라 작성되는 한, using_xnamespace를 사용하여 해당 파일이 의존하는 라이브러리가 먼저 로드되도록 할 수 있습니다.
xnamespace가 js 파일에 대해 갖는 유일한 요구 사항은 파일을 이름 없는 함수 클로저(function(){ })()로 묶어야 한다는 것입니다. xnamespace를 사용하지 않더라도 이는 많은 고품질 코드의 관행이기도 합니다. 테스트된 브라우저 ie6 ie7 ff NetScape Safari
테스트에 실패한 브라우저 Opera Swift에 대한
boot.js의 내용입니다.
[복사]코드:
(함수(){
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)//네임스페이스를 기반으로 비공개로 파일 경로 가져오기
{
네임스페이스=네임스페이스.split(".");
var file_path=X.file_path;
var i=0;
while((typeof file_path)=="객체")
{
file_path=파일_경로[네임스페이스[i++]];
}
반환(파일_경로);
}
function check_xnamespace(namespace)//네임스페이스가 있는지 확인하고, 있으면 네임스페이스를 가져옵니다.
{
네임스페이스=네임스페이스.split(".");
var x네임스페이스=X;
var i=0;
while(i<네임스페이스.길이)
{
if(!x네임스페이스[네임스페이스[i]])return;
xnamespace=xnamespace[네임스페이스[i++]];
}
x네임스페이스를 반환합니다;
}
function regist_xnamespace(네임스페이스)//네임스페이스 등록
{
네임스페이스=namespace.split(".");
var x네임스페이스=X;
var i=0;
while(i<네임스페이스.길이)
{
if(!(xnamespace[네임스페이스[i]]))xnamespace[네임스페이스[i]]={};
//if(typeof xnamespace[namespace[i]]!="object")throw "이름 충돌";
xnamespace=xnamespace[네임스페이스[i++]];
}
x네임스페이스를 반환합니다;
}
function using_xnamespace(namespace)//네임스페이스 확인 및 로드
{
//alert();
if(check_xnamespace(네임스페이스))return;
var file_path=getFilePath(네임스페이스);
//경고(파일_경로);
var scriptElement=document.createElement("script");
scriptElement.src=file_path;
만약(isIE)
{
scriptElement.document;
}
또 다른
{
//alert(document.getElementsByTagName("head")[0]);
scriptElement.onload=함수()
{
X.library_queue.run();
}
document.getElementsByTagName("head")[0].appendChild(scriptElement);
if(X.library_queue.push(arguments.callee.caller))
throw "라이브러리가 로드되지 않았습니다."
}
}
함수 import_xnamespace(네임스페이스)
{
var xnamespace=get_xnamespace(네임스페이스);
for(xnamespace의 var p)
{
if(창[p]==x네임스페이스[p])continue;
if(window[p]) throw "이름 지정 충돌";
창[p]=x네임스페이스[p];
}
}
함수 import_xnamespace(네임스페이스)
{
var xnamespace=get_xnamespace(네임스페이스);
for(xnamespace의 var p)
{
if(창[p]==x네임스페이스[p])창[p]=정의되지 않음;
}
}
X.파일_경로={
에이:{
비:{
c:"./abc.js"
},
d:"./ad.js",
e:"./ae.js"
}
}
X.library_queue=새 배열();
X.library_queue.run=function(){
동안(this.length)
{
(this.pop())();
}
}
X.library_queue.push=함수(f)
{
for(var i=0;i<this.length;i++)
{
if(this[i].toString()==f.toString())return false;
}
이것[i]=f;
사실을 반환;
}
})();
10.21 2007 조용히 업데이트됨: Exception 및 FilePath 파일 분리