第八章:
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對話框:
confirm對話框:
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屬性,爲歷史記錄的數量。