JavaScript高級程序設計(反芻)7

第八章:

BOM (Browser Object Model) 操作,也就是瀏覽器對象模型,核心對象是window,window對象既是JavaScript訪問瀏覽器的一個接口,又是ECMAScript上的Global對象。

(大型項目的開發過程中,及其不建議使用BOM操作方法,瀏覽器市場比較繁雜,所以直接操作瀏覽器的方法會帶來很大的隱患 )

全局作用域中聲明的所有變量和函數都是window對象的方法和屬性,可以使用window點出的方式直接進行訪問。這裏在全局作用域中直接定義的屬性就是window對象的方法,但是window對象直接創建的方法和這種全局作用域創建的還是有些不同:在全局作用域中定義的屬性/方法不能通過delete方法直接刪除,但是window對象直接定義的可以。

嘗試訪問未聲明的變量會導致錯誤,但是通過查詢window對象可以知道某個未聲明變量是否存在。且在子函數中直接給未聲明的變量賦值,該變量定義在全局中。

如果頁面中包含框架,則每個框架都擁有自己的window對象,並保存在frames集合中。(不建議用這種方法,個人也從未見過企業官網用這種寫法)

獲取窗口位置

var leftPos = (typeof window.screenLeft == “number”) ? window.screenLeft : window.screenX;
var topPos = (typeof window.screenTop == “number”) ? window.screenTop: window.screenY;

窗口大小:

var pageWidth = window.innerWidth,
    pageHeight = window.innerHeight;
if(typeof pageWidth != “number”){
    if(document.compatMode == “CSS1Compat”){
	    pageWidth = document.documentElement.clicetWidth;
	    pageHeight = document.documentELement.cliceHeight;
	}else{
	    pageWidth = document.body.clientWidth;
	    pageHeight = docuemnt.body.clientHeight;
	}
}

也可以使用resizeTo()和resizeBy()方法調整瀏覽器窗口大小,但是這種方法可能被瀏覽器禁用,在框架中也是禁用的!

導航和打開窗口:

使用window.open()方法既可以導航到一個特定的URL,該方法接收四個參數:要加載的URL、窗口目標、一個特性字符串、新頁面是否取代瀏覽器歷史記錄中當前加載頁面的布爾值。
1.要加載的URL地址
2.窗口目標:topFrame、_self、_parent、_top、_blank
3.創建新標籤/新窗口,不打開新窗口時會忽略第三個參數

間歇調用和超時調用:
JavaScript是單線程語言,兩種時間代碼執行方式,一種是時間達到後執行該代碼,另一種是每隔一段時間執行一次該端代碼。
setTimeout()方法,時間到達執行該段代碼,第一個參數爲要執行的代碼,第二個參數爲等待時間。因爲JavaScript是一個單線程解釋器,所以在一段時間內只能執行一段代碼,所以爲了控制要執行的代碼,噹噹前代碼馬上要解析時,將當前的任務添加到隊列裏。
(傳遞字符串會導致性能損失,不建議使用字符串作爲第一個參數)
setInterval()方法,每隔一段時間執行一次該代碼。參數與上面的相同,並且這種方法一般不建議使用,更多的時候使用setTimeout()方法代替該方法使用。
同時裏面存在兩種方法:clearTimeout()方法、clearInterval()方法

function setTimeInter(){
    num++;
    if(num < max){
        setTimeout(setTimeInter, 500);       //其實就是一個迭代的過程
	}else{
         alter(“Done”);
	}
}

系統對話框:(這裏使用chrome瀏覽器)
alert對話框:
alert對話框
confirm對話框:
confirm對話框
prompt對話框:
prompt對話框
location對象:

這個對象返回的參數主要集中在對於URL的反饋方面,且window.location和document.location返回的是同一個對象

function getQuery(){
    var qs = (location.search.length > 0 ? location.search.substring(1) : “”),
        args = {}, //存儲
        items = qs.length ? qs.split(“&”) : [ ],  //以&分割
        item = null,
        name = null,
        value = null,
        i = 0,
        len = item.length;
        
   for(i = 0; i<length; i++){            //循環判斷已經分割開的數組,再將其分爲name和value
     item = items[i].split(“=”);
     name = decodeURIComponent(item[0]);
     value = decodeURIComponent(item[1]);
     if(name.length){
       args[name] = value; 				 //前面輸入name,則返回value
		 }
	}
	return value;
}

Navigator對象:

在這裏插入圖片描述
在這裏插入圖片描述

function hasFlash(){                         //檢測Flash
    var result = hasPlugin(“Flash”);
    if(!result){
   		result = hasIEPlugin(“ShokwaveFlash.ShockwaveFlash”);
	}
	return result;
}
function hasQuickTime(){                     //檢測QuickTIme
    var result = hasPlugin(“QuickTime”);
    if(!result){
    	result = hasIEPlugin(“QuicjTime.QuickTime”);
	}
	return result;
}

histroy對象:
保存用戶上網的歷史記錄,使用該對象的go()方法可以實現跳轉,參數爲數值,正數爲前進,負數爲倒退,或者直接添加特定網頁,進行跳轉。
該對象中還存在一個length屬性,爲歷史記錄的數量。

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