使javascript也能包含檔案

來源:互聯網
上載者:User

javascript功能強大,但一個問題是它不能包含其它的js檔案,而其它非指令碼語言卻基本都是有這個功能的,不得不覺得有點遺憾。窮則思變,越來越發現不動態匯入檔案會嚴重加大載入頁面的時間,經過實驗,發現了一個辦法,利用xhtml來實現這個功能,下面的函數就可以動態匯入javascript檔案和css樣式檔案:

複製代碼 代碼如下:function $import(path,type,title){
var s,i;
if(type=="js"){
var ss=document.getElementsByTagName("script");
for(i=0;i<ss.length;i++){
if(ss[i].src && ss[i].src.indexOf(path)!=-1)return;
}
s=document.createElement("script");
s.type="text/javascript";
s.src=path;
}else if(type=="css"){
var ls=document.getElementsByTagName("link");
for(i=0;i<ls.length;i++){
if(ls[i].href && ls[i].href.indexOf(path)!=-1)return;
}
s=document.createElement("link");
s.rel="alternate stylesheet";
s.type="text/css";
s.href=path;
s.title=title;
s.disabled=false;
}
else return;
var head=document.getElementsByTagName("head")[0];
head.appendChild(s);
}

對於樣式檔案,預設匯入後是立即生效的,這有可能會導致和前面一種選定樣式效果重疊,造成混亂。所以在我的blog中是使用下面的函數來實現樣式的切換功能:

複製代碼 代碼如下:function setStyle(title) {
var i, links,eflag=false;
links = document.getElementsByTagName("link");
for(i=0; links[i]; i++) {
if(links[i].getAttribute("rel").indexOf("style") != -1 && links[i].getAttribute("title")) {
links[i].disabled = true;
if(links[i].getAttribute("title").indexOf(title) != -1){links[i].disabled = false;eflag=true;}
}
}
if(!eflag){
$import("skin/"+title+"/default.css","css",title);
setStyle(title);
}
}

最後,說明一下,因為javascript檔案是需要從遠程載入的,所以有人可能會問在調用$import()函數後,是立即執行$import()後面的語句,還是等載入完以後再執行其後的語句。我粗略實驗了一下,發現是等載入完後再執行後面的語句的,而且如果載入的js裡有立即執行的代碼,那麼它會先於$import()後面的語句執行。這也是我們想要的結果,因為這樣就可以在$import()之後調用載入的檔案裡的函數了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.