實際上,你可以lazyload聯JavaScript:文/ delayscript
FROM
<!– Inline Script –>
<script type="text/javascript" language="javaScript">
/* Code */
</script>
要
<!– Inline Script –>
<script type="text/delayscript">
/* Code */
</script>
給腳本: 1-變化內嵌腳本類型參數標記一個自定義MIME類型text/delayscript強制瀏覽器忽略它的內容(請注意,完全忽略它將默認爲text/javascript )。
2-懶惰加載所有內聯腳本 一旦頭。JS(或者你可能使用的其他框架)證實,懶加載所有的外部JS,你就可以抓住所有的自定義腳本標記的內容,並在頁面注入其中:
<script>
head.ready(function() {
var
_head = document.getElementsByTagName("head")[0],
_script = document.createElement('script'),
_scripts = document.getElementsByTagName("script"),
_txt = "text/delayscript",
_contents = []
;
for(var i=0,l=_scripts.length;i<l;i++){
var _type = _scripts[i].getAttribute("type");
if(_type && _type.toLowerCase() ==_txt)
_contents.push(_scripts[i].innerHTML)
}
_script.type = 'text/javascript';
_script.innerHTML = _contents.join(" ");
_head.appendChild(_script);
});
爲了更加優雅,您可以實際上將內聯腳本保留在DOM樹中的原始層次結構中,而不是像上面所建議的那樣將其所有內容都塞進一個腳本中,方法是將標記的內聯腳本標記替換爲新的腳本標記has mime type text/javascript:
head.ready(function() {
var
_scripts = document.getElementsByTagName("script"),
_doc = document,
_txt = "text/delayscript"
;
for(var i=0,l=_scripts.length;i<l;i++){
var _type = _scripts[i].getAttribute("type");
if(_type && _type.toLowerCase() ==_txt)
_scripts[i].parentNode.replaceChild((function(sB){
var _s = _doc.createElement('script');
_s.type = 'text/javascript';
_s.innerHTML = sB.innerHTML;
return _s;
})(_scripts[i]), _scripts[i]);
}
});
號,但你可以通過使用'窗口讓你的工作更容易$ = waitUntilCodeLoaded'。這樣你只能改變一半的內聯代碼。事實上,內聯代碼很糟糕,所有內部代碼都是外部的 – Raynos
@Raynos:我正在考慮將所有的代碼移到他們自己的文件中,但是我們有很多意見,這需要一段時間。我希望能有一個快捷的,可靠的解決方法。 –
Raynos是對的 – Salaros