不同瀏覽器加載JS不同解決方案——defer

最近在工作中遇到了一個奇怪的問題,在web文本前端加載js文件,在Chrome和Firefox瀏覽器中運行正常,但在IE瀏覽器中運行無法顯示效果。採用多種辦法,最後發現IE和Firefox瀏覽器兼容性互斥,於是採用了再JS文件中先辨別瀏覽器類型,然後根據不同的瀏覽器來進行不同的加載。具體如下:

<script>
	function LoadJS(jsUrl, errCallBack,asyncl)
	{
		$.ajax({
			url:jsUrl,
			type:'get',
			cache:false,
			async:asyncl,
			error:function(){
				if(errCallBack && idFunction(errCallBack))
				{
					errCallBack();
				}
			}
		});
	}
	function errCallBack()
	{
		
	}
	if($.browser.mise)
	{
		LoadJS("xxxx.js",errCallBack,false);
	}
	else if(navigator.useAgent.indexOf("Safari")>0)
	{
		LoadJS("xxxx.js",errCallBack,true);
	}
	else
	{
		var oHead=document.getElementByTagBame('HEAD').item(0);  
		var oScript=document.createElement("script");  
		  
		oScript.language="javascript";  
		oScript.type="text/javascript";  
		oScript.id=sId;  
		oScript.defer=true;  
		oScript.text=source;  
		oHead.appendChild(oScript);
	}
</script>

經過了這麼多努力,發現還是存在一些問題,在Firefox瀏覽器隱身模式下進行加載時還是會出現一些問題,此時不在進行解決。查詢其他方法,無意間發現script的defer屬性,將源代碼中的的script文件的加載設置defer爲TRUE,解決所有問題,上述代碼也不在需要。在此對Javascript的defer屬性進行分析和總結:

defer屬性設置爲TRUE時,讓瀏覽器加載js腳本時不等腳本加載完成就開始對該腳本之後的其他圖片、文本、HTML代碼進行加載了,然後讓js腳本自己在慢慢加載,然後再執行。

給外鏈的JS腳本添加defer="true",其方式如下:

<script defer="true" src="xxxx.js" type="text/javascript"/>,這種方式加載JS文件能夠提高網頁的加載速度,特別是對比較大的腳本。

注意,defer="true"還可以用作defer="defer",但在XTHML格式的網頁中還是使用defer="true"比較恰當。在使用defer時應注意一下問題:

1、不要在defer型腳本程序段中調用document.write命令,因爲document.write將產生直接輸出效果。

2、不要在defer型腳本程序段中包括任何立即執行腳本要使用的全局變量或者函數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章