07.第8章:BOM

1.window對象

window有雙重角色:既是通過javascript訪問瀏覽器窗口的一個接口,又是ES規(guī)定的Global對象。

1.1 窗口關(guān)系及框架

如果頁面中包含框架,則每個框架都擁有自己的window對象,并且保存在frames集合中,可以通過數(shù)值索引或者根據(jù)框架名稱來訪問相應(yīng)的window對象。



通過代碼訪問每個框架,最好使用top.frames[0]的方式,因?yàn)閠op對象始終指向最外層的框架。



parent對象:始終指向當(dāng)前框架的直接上層框架。在沒有框架的情況下parent==top==window
1.2 窗口位置

窗口相對于屏幕左邊和上邊的位置
IE、Safari、Opera、Chrome提供:screenLeft、screenTop屬性
FireFox、Safari、Opera、:screenX、screenY屬性

let leftPos=(typeof window.screenLeft=="number")?window.screenLeft:window.screenX;
let topPos=(typeof window.screenTop=="number")?window.screenTop:window.screenY;

無法在跨瀏覽器的條件下取得窗口左邊和上邊的精確值。
使用moveTo()和moveBy()方法可以將窗口精確地移動到一個新位置。
moveTo()接收的是新位置的x,y坐標(biāo)值
moveBy()接收的是水平和垂直方向移動的像素?cái)?shù)。

//移動到屏幕左上角
window.moveTo(0,0);
//將窗口移動到(200,300)的位置
window.moveTo(200,300);
//將窗口向下移動100px
window.moveBy(0,100);
//將窗口向左移動50px
window.moveBy(-50,0);

注意:在Opera和IE7及以上版本被禁用
不適用于框架,只能對最外層的window對象使用。

1.3 窗口大小

最終無法確定瀏覽器窗口本身的大小,但可以取得頁面視口的大小
IE9+、Firefox、safari、Opera和Chrome提供了四個屬性:innerWidth、innerHeight、outerWidth、outerHeight
IE8及早期版本、Firefox、safari、Opera和Chrome:document.documentElement.clientWidth、
document.documentElement.clientHeight屬性
IE6中這些屬性在標(biāo)準(zhǔn)模式才有效,混雜模式:document.body.clientWidth、document.body.clientHeight

let pageWidth=window.innerWidth,
     pageHeight=window.innerHeight;
//如果瀏覽器沒有window.innerWidth屬性
if(typeof pageWidth !="number"){
   //如果是標(biāo)準(zhǔn)模式
   if(document.compatMode=="CSSlCompat"){
       pageWidth=document.documentElement.clientWidth;
       pageHeight=document.documentElement.clientHeight;
  }else{
    //如果是混雜模式
    pageWidth=document.body.clientWidth;
    pageHeight=document.body.clientHeight;
 }
}
1.4.導(dǎo)航和打開窗口

window.open()方法,這個方法可以接收4個參數(shù)。
要加載的URl、窗口目標(biāo)、一個特性字符串、一個表示新頁面是否取代瀏覽器歷史幾種中當(dāng)前加載頁面的布爾值。
通常只需傳遞一個參數(shù),最后一個參數(shù)只在不打開新窗口的情況下使用。



第三個參數(shù)是一個逗號分隔的設(shè)置字符串,表示在新窗口都顯示哪些特性。


1.5 間歇調(diào)用和超時調(diào)用
  • 1)超時調(diào)用:指定時間過后執(zhí)行代碼

超時調(diào)用需要使用window對象的setTimeout()方法,它接收兩個參數(shù):要執(zhí)行的代碼、以毫秒表示的時間,
會返回一個唯一的id

//1000ms
let timeoutId=setTimeout(function(){
    alert(“Hello world!”);
},1000);

//取消超時調(diào)用
clearTimeout(timeoutId);

只要是在指定的時間尚未過去之前調(diào)用clearTimeout(),就可以完全取消超時調(diào)用。上述代碼在設(shè)置超時調(diào)用之后又馬上調(diào)用了clearTimeout(),結(jié)果就什么也沒有發(fā)生。

  • 2)間歇調(diào)用:按照指定的時間間隔重復(fù)執(zhí)行代碼,直至間歇調(diào)用被取消或者頁面被卸載。

setInterval(),接收參數(shù)與超時調(diào)用相同。

let num=0;
let max=10;
let intervalId;
intervalId=setInterval(incrementNumber,500);
function incrementNumber(){
  num++;
  if(num==max){
   //如果num達(dá)到最大值,取消間歇調(diào)用
   clearInterval(intervalId);
   alert("Done");
  }
}

間歇調(diào)用可以使用超時調(diào)用實(shí)現(xiàn):

let num=0;
let max=10;
let timeoutId;
timeoutId=setTimeout(incrementNumber,500);
function incrementNumber(){
  num++;
if(num<max){
   setTimeout(incrementNumber,500);
}else{
   //如果num達(dá)到最大值,取消超時調(diào)用
   clearTimeout(timeoutId);
   alert("Done");
  }
}
1.6 系統(tǒng)對話框

alert()方法

alert("Hello world!");

confirm()方法

confirm("are you sure?");

prompt()方法:提示框,用于提示用戶輸入一些文本。
提示框除了顯示OK和Cancel按鈕之外,還會顯示一個文本輸入域,供用戶在其中輸入內(nèi)容。
接收兩個參數(shù):顯示給用戶的文本提示和文本輸入域的默認(rèn)值
返回:用戶單機(jī)OK,返回文本輸入域的值;如果取消或關(guān)閉,返回null。

let result=prompt("What is your name?","Michael");
if(result!=null){
  alert("Welcome "+ result);
}

window.print():顯示打印對話框
window.find():顯示查找對話框

2.location對象

既是window對象的屬性,也是document對象的屬性,window.location和document.location引用的是同一個對象。


2.1 查詢字符串參數(shù)
  function getQueryStringArgs(){
//獲取去掉?之后的查詢字符串
  let str=location.search.length>0?location.search.substring(1) : "");
//將字符串按照&劃分開  
let items=str.length>0?str.split("&") : [];
let item,name,value;
let args={};//定義字面量對象
for(let i=0;i<items.length;i++){
    //將=左右兩邊分開
    item=items[i].split("=");
   name=decodeURIComponent(item[0]);
   value=decodeURIComponent(item[1]);
   if(name.length>0)
      args[name]=value; //將key,value放入args。
  }
  return args;
}
2.2 網(wǎng)址操作

assign()方法改變網(wǎng)址
location.assign(“http://www.baidu.com”);
使用location.href和window.location設(shè)置URL值,也會調(diào)用assign()方法。


2.3.reload()方法

3.navigator對象

用于檢測顯示網(wǎng)頁的瀏覽器類型。



4.screen對象


5.history對象

history對象保存著用戶上網(wǎng)的歷史紀(jì)錄,從窗口被打開那一刻起。因?yàn)閔istory是window對象的屬性,因此每個瀏覽器窗口、每個框架都有自己的history對象。出于安全考慮,開發(fā)人員無法得知用戶瀏覽過的url,不過可以借由用戶訪問過的頁面列表,在不知道URL的情況下實(shí)現(xiàn)前進(jìn)后退。

前進(jìn)后退
  • go()方法
//參數(shù)是負(fù)數(shù),后退
history.go(-1);
//參數(shù)是正數(shù),前進(jìn)正數(shù)頁,這里1頁
history.go(1);
//前進(jìn)2頁
history.go(2);
//參數(shù)是字符串,跳轉(zhuǎn)到歷史紀(jì)錄中包含該字符串的第一個位置
history.go("wrox.com");
  • 使用back()和forward()代替go()
//前進(jìn)一頁
history.forward();
//后退一頁
history.back();
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 8.1 window對象 BOM的核心對象是window,它表示瀏覽器的一個實(shí)例。在網(wǎng)頁中定義的任何一個對象、變量...
    Elevens_regret閱讀 333評論 0 0
  • ECMAScript 是 JavaScript 的核心,但如果要在 Web 中使用 JavaScript,那么 B...
    劼哥stone閱讀 880評論 2 5
  • 我一直覺得談戀愛就是要拼盡全力,全部最好的東西都要拿出來給自己的另一半,這樣才能得到另一半的愛情。 可后來我發(fā)現(xiàn),...
    孤寡老人ing閱讀 598評論 0 5
  • 重慶,是一座火鍋的城市,也是一個江湖。 人生啊,不過是一鍋火鍋,酸甜苦辣,不過是一場江湖,無言以表。 實(shí)習(xí)之后,對...
    xiaotianer閱讀 171評論 0 1
  • 夢想總是美好的,現(xiàn)實(shí)卻不一定會如意,所以我們只有夢是不夠的,還需要為之付出實(shí)際,以積極的心態(tài)去面對未來的每一次磕磕...
    哈勃李閱讀 95評論 0 0

友情鏈接更多精彩內(nèi)容