JavaScript之BOM基礎

来源:https://www.cnblogs.com/hsiang/archive/2020/02/17/12324156.html
-Advertisement-
Play Games

BOM(Browser Object Model)也叫瀏覽器對象,它提供了很多對象,用於訪問瀏覽器的功能。但是BOM是沒有標準的,每一個瀏覽器廠家會根據自己的需求來擴展BOM對象。本文主要以一些簡單的小例子,簡述前端開發中BOM的相關基礎知識,僅供學習分享使用,如有不足之處,還請指正。 ...


BOM(Browser Object Model)也叫瀏覽器對象,它提供了很多對象,用於訪問瀏覽器的功能。但是BOM是沒有標準的,每一個瀏覽器廠家會根據自己的需求來擴展BOM對象。本文主要以一些簡單的小例子,簡述前端開發中BOM的相關基礎知識,僅供學習分享使用,如有不足之處,還請指正。

概述

window對象是最頂層的對象,旗下還有6大屬性,也都是對象。document對象下也有5大屬性,同樣都是對象。window的屬性和方法,可以採用:window.屬性,或 window.方法()進行調用,或者直接調用。BOM結構圖,如下所示:

window對話框

window提供的預設對話共三種:系統對話框(alert),選擇對話框(confirm),輸入對話框(prompt),如下所示:

1 //系統對話框
2 alert('Hello world!!!'); //彈出一個對話框,只有一個確定按鈕,沒有返回值。
3 //選擇對話框,有兩個按鈕,確定和取消。本身可以返回bool類型的結果,如果確定,返回true,否則返回false
4 document.writeln( confirm('Are you sure ?'));//點確定,輸出true ;取消,輸出:false
5 //輸入框,需要用戶輸入值,輸入的數據類型不限
6 document.writeln(prompt('Plese input a value:','0'));//點確定:返回輸入的值;點取消,返回null。

打開視窗

通過調用window.open方法,打開新的視窗。open方法共3個參數:1、新視窗的URL 2、視窗名稱或目標 3、設置視窗屬性 。如下所示:

1 window.open('http://www.baidu.com'); //打開新視窗
2 window.open('http://www.baidu.com','baidu');//新打開視窗的名稱,凡是打開相同名稱的視窗,則會原有視窗中重新載入。
3 window.open('http://www.baidu.com','_black');//在新視窗中打開並載入,也是只會打開一個
4 window.open('http://www.baidu.com','_parent');//在本視窗中載入

第三個參數,是視窗的一些特征,如寬,高,坐標,等。用逗號隔開。如下所示:

1 var box=window.open('http://wwww.baidu.com','baidu','width=400,height=400,top=100,left=100,location=yes');
2 document.writeln(box);//輸出:[object Window] 即,open預設返回子視窗的window對象。
3 box.alert('show!!!');//由於跨域,則預設瀏覽器拒絕訪問
4 var box=window.open('index.html','baidu','width=400,height=400,top=100,left=100,location=yes');
5 box.alert('show!!!');//不跨域,則可以訪問
6 window.opener.document.writeln('訪問父視窗');//通過window.opener訪問父視窗

open方法預設返回新視窗的window對象,可以通過返回值來訪問子視窗內容。

視窗的位置

用於獲取和設置視窗的位置(左上角的起始坐標),主要通過screenLeft、screenTop和screenX、screenY來訪問,如下所示:

1 document.writeln(window.screenLeft);//左邊坐標,此屬性firefox不支持
2 document.writeln(window.screenTop);//上邊坐標,此屬性firefox不支持
3 document.writeln(window.screenX);//左邊坐標,此屬性firefox支持,IE9以上也支持
4 document.writeln(window.screenY);//上邊坐標,此屬性firefox支持,IE9以上也支持

以上屬性有的瀏覽器不支持,可以判斷返回值是否是number類型來區分,如下所示:

1 var left=typeof window.screenLeft=='number'?window.screenLeft:window.screenX;
2 var top=typeof window.screenTop=='number'?window.screenTop:window.screenY;
3 document.writeln('left='+left+',top='+top);//輸出:left=0,top=109 

視窗大小

視窗的大小,主要通過innerWidth、innderHeight和outerWidth、outerHeight來設置和獲取。如下所示:

1 document.writeln(window.innerWidth);//,IE9以上也支持 內視窗顯示區大小
2 document.writeln(window.innerHeight);//,IE9以上也支持 內視窗顯示區大小
3 document.writeln(window.outerWidth);//,IE9以上也支持 ,外視窗整體大小,包含工具欄和邊框
4 document.writeln(window.outerHeight);//,IE9以上也支持,外視窗整體大小,包含工具欄和邊框
5 document.writeln(document.documentElement.clientWidth);//獲取document的寬度 和innderWidth效果一樣            
6 document.writeln(document.documentElement.clientHeight);//獲取document的高度 和innderHeight效果一樣

如何跨瀏覽器獲取視窗大小,可以通過document.compatMode判斷瀏覽器的模式,如下所示:

 1 var width=window.innerWidth;
 2 var height=window.innerHeight;
 3 if(typeof width !='number'){
 4     if(document.compatMode=='CSS1Compat'){
 5         //如果就標準模式
 6         width=document.documentElement.clientWidth;
 7         height=document.documentElement.clientHeight;
 8     }else{
 9         width=document.body.clientWidth;
10         height=document.body.clientHeight
11     }
12 }
13 document.writeln('width='+width+',height='+height);//輸出:width=1366,height=620 

視窗的移動和重置大小

通過moveTo、moveBy和resizeTo、resizeBy來設置視窗的大小和移動位置,如下所示:

1 window.moveTo(100,100);//移動到某個位置,目前都不支持,不起作用
2 window.moveBy(10,10);//每次刷新移動多少位置,目前都不支持,不起作用
3 window.resizeTo(300,300);//調整視窗大小,第一次打開起作用,後面再刷新不起作用
4 window.resizeBy(10,10);//重新設置視窗的大小,目前不起作用

window定時器

window的定時器一共有兩種:1、超時操作(setTimeOut) 2、間歇操作(setTimeInterval)。

超時操作:第一個參數:可以執行的代碼塊字元串,第二個參數:超時時間,單位毫秒。如下所示:

1 //超時操作:第一個參數:可以執行的代碼塊字元串,第二個參數:超時時間,單位毫秒
2 setTimeout('alert("hello js!!!")',2000);
3 //但是不建議上述寫法:不容易擴展,容易出錯。可以採用如下方法:
4 function box(){
5     alert('hello js !!!');
6 }
7 setTimeout(box,2000);

但是上述方法就分開的,不是一個整體,推薦採用如下方式優化:

1 var box= setTimeout(function() {
2     alert('hello js !!!');
3 }, 2000);//推薦寫法:擴展性好,封裝性也好
4 //box表示超時執行的id
5 document.writeln(box);
6 clearTimeout(box);//可以取消超時調用執行計劃

備註:超時操作通過clearTimeout來取消操作,參數為超時操作返回的id。

間歇調用,可以重覆執行,定時執行,如下所示:間隔200毫秒,輸出1到5。

 1 var num=0;
 2 var max=5;
 3 function bb(){
 4     num++;
 5     //document.writeln(num);//不可以用wirteln
 6     document.getElementById('A01').innerText=num;
 7     if(num==max){
 8         clearInterval(box);
 9     }
10 }
11 var box = setInterval(bb,200);

上述例子,也可以通過超時調用,模擬間歇調用,如下所示:

 1 var num=0;
 2 var max=5;
 3 var box=0;
 4 function bb(){
 5     num++;
 6     //document.writeln(num);//不可以用wirteln
 7     document.getElementById('A01').innerText=num;
 8     if(num==max){
 9         clearTimeout(box);
10     }else{
11         box=setTimeout(bb,200);
12     }
13 }
14 box = setTimeout(bb,200);

location對象

javascript中location地址對象描述的是某一個視窗對象所打開的地址。如下所示:

 1 document.writeln(window.location);//返回當前的路徑
 2 document.writeln(document.location);//返回當前的路徑
 3 window.location.hash="#66";//設置錨點,會跳轉到新的頁面,#可以不帶,會預設帶上
 4 document.writeln(window.location.hash);//返迴路徑的錨點,#66
 5 //
 6 document.writeln(window.location.port);//返回當前訪問的路徑的埠
 7 window.location.port=8888;//如果設置埠,則會跳轉到對應的埠        
 8 document.writeln(window.location.search);//返迴路徑中?後面的信息,如:?__hbt=1581605601724 
 9 window.location.assign('http://www.baidu.com');//可以實現跳轉到指定的url功能
10 window.location.href='http://www.baidu.com'; //同樣可以跳轉

重新載入,通過reload來實現,如下所示:

1 window.location.reload();//進行重新載入,可能是從緩存中載入
2 window.location.reload(true);//強制從後臺載入
3 window.location.replace('http://www.baidu.com');//在當前頁面替換當前url到新的url並重新載入的方法

history對象

主要用於訪問歷史記錄,如:前進、後退、跳轉等,如下所示:

1 document.writeln(window.history.length);//返回歷史記錄的屬性
2 window.history.back();//往後退
3 window.history.forward();//前進
4 window.history.go(-1);//跳轉到指定的頁數,負數往後退,正數往前進

navigator對象

navigator對象包含訪問者客戶端的相關信息,且navigator對象的實例的唯一的,如下所示:

1 document.writeln(window.navigator.appName);//完整瀏覽器名稱,IE輸出:Netscape ,不能精確的輸出瀏覽器
2 document.writeln(window.navigator.userAgent);
3 //http頭代理名稱,IE輸出:Netscape Mozilla/5.0 (Windows NT 6.1; Win64; x64; Trident/7.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; rv:11.0) like Gecko            
4 document.writeln(window.navigator.platform);//瀏覽器操作系統的平臺,輸出:Win64            
5 //插件列表
6 document.writeln(window.navigator.plugins.length);//插件個數

通過navigator對象輸出瀏覽器的插件信息,如下所示:

1 for(var i=0;i<window.navigator.plugins.length;i++){
2     document.writeln('插件名稱:'+window.navigator.plugins[i].name);
3     document.writeln('插件文件名:'+window.navigator.plugins[i].filename);
4     document.writeln('插件描述:'+window.navigator.plugins[i].description);
5     document.writeln('插件版本'+window.navigator.plugins[i].version);
6     document.writeln('<br />');
7 }

瀏覽器支持的MIME類型,如下所示:

1 document.writeln(window.navigator.mimeTypes.length);//4 
2 for(var i=0;i<window.navigator.mimeTypes.length;i++){
3     document.writeln(' mime名稱:'+window.navigator.mimeTypes[i].type);
4     document.writeln(' mime描述:'+window.navigator.mimeTypes[i].description);
5     document.writeln(' mime尾碼:'+window.navigator.mimeTypes[i].suffixes);
6     document.writeln('<br />');
7 }

備註

至於其他瀏覽器對象,用到的不是很多,暫不介紹。

生命賦予了我們靈魂,卻沒有教會我們如何走,關於情感的路,需要的是兩個人風雨同舟。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 通過前面文章的學習已經掌握了Linux系統配置管理的知識,本文講解Centos7網路配置知識。 ...
  • 作為一名後端開發,MySQL的使用必不可少,合理的使用索引和索引調優是後端開發者必須掌握的技能之一。 ...
  • 1 環境 樹莓派: mysql: 2 指令 以下是從命令行中連接mysql伺服器的簡單實例: [root@host]# mysql -u root -p Enter password:****** 或者: pi@raspberrypi:~ $ sudo mysql 查看資料庫: mysql> SHO ...
  • HDFS(Hadoop Distributed File System) 分散式文件系統,HDFS是一個高度容錯性的系統,適合部署在廉價的機器上。HDFS能提供高吞吐量的數據訪問,非常適合大規模數據集上的應用.由NameNode,若幹DataNode,以及Secondary NameNode組成。 ...
  • Hadoop是一個由Apache基金會所開發的分散式基礎架構,Hadoop的框架最核心的設計就是:HDFS和MapReduce。HDFS為海量的數據提供了存儲,而MapReduce則為海量的數據提供了計算,特點是:高可靠性,高擴展性,高效性,高容錯性。 Hadoop與Google三篇論文 Googl ...
  • 不久前自學完完sql,下了mysql8.0.17,安裝配置好後探索著,想著用root賬戶登上去能不能刪除root賬戶呢,然後就想給自己一巴掌,,, 如何快速恢復root: 1.關閉mysql服務:win+R鍵鍵入services.msc,找到mysql服務,點擊stop; 2.刪除data文件夾及其 ...
  • 在Druid快速入門其實已經簡單的介紹過最簡化配置的單節點部署,本文我們將詳細描述Druid的多種部署方式,對於測試開發環境可以選用輕量的單機部署方式,而生產環境我們最好選用集群部署的方式,確保系統的高可用性。 一、單機部署 Druid提供了一組可以參考的配置和單機部署的啟動腳本。 尺寸適合筆記本電 ...
  • 定義 對象是JS中的引用數據類型。對象是一種複合數據類型,在對象中可以保存多個不同數據類型的屬性。使用typeof檢查一個對象時,會返回object。 分類 內置對象 由ES標准定義的對象,在任何ES的實現中都可以實現。比如 Math String Number Boolean Function O ...
一周排行
    -Advertisement-
    Play Games
  • GoF之工廠模式 @目錄GoF之工廠模式每博一文案1. 簡單說明“23種設計模式”1.2 介紹工廠模式的三種形態1.3 簡單工廠模式(靜態工廠模式)1.3.1 簡單工廠模式的優缺點:1.4 工廠方法模式1.4.1 工廠方法模式的優缺點:1.5 抽象工廠模式1.6 抽象工廠模式的優缺點:2. 總結:3 ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 本章將和大家分享ES的數據同步方案和ES集群相關知識。廢話不多說,下麵我們直接進入主題。 一、ES數據同步 1、數據同步問題 Elasticsearch中的酒店數據來自於mysql資料庫,因此mysql數據發生改變時,Elasticsearch也必須跟著改變,這個就是Elasticsearch與my ...
  • 引言 在我們之前的文章中介紹過使用Bogus生成模擬測試數據,今天來講解一下功能更加強大自動生成測試數據的工具的庫"AutoFixture"。 什麼是AutoFixture? AutoFixture 是一個針對 .NET 的開源庫,旨在最大程度地減少單元測試中的“安排(Arrange)”階段,以提高 ...
  • 經過前面幾個部分學習,相信學過的同學已經能夠掌握 .NET Emit 這種中間語言,並能使得它來編寫一些應用,以提高程式的性能。隨著 IL 指令篇的結束,本系列也已經接近尾聲,在這接近結束的最後,會提供幾個可供直接使用的示例,以供大伙分析或使用在項目中。 ...
  • 當從不同來源導入Excel數據時,可能存在重覆的記錄。為了確保數據的準確性,通常需要刪除這些重覆的行。手動查找並刪除可能會非常耗費時間,而通過編程腳本則可以實現在短時間內處理大量數據。本文將提供一個使用C# 快速查找並刪除Excel重覆項的免費解決方案。 以下是實現步驟: 1. 首先安裝免費.NET ...
  • C++ 異常處理 C++ 異常處理機制允許程式在運行時處理錯誤或意外情況。它提供了捕獲和處理錯誤的一種結構化方式,使程式更加健壯和可靠。 異常處理的基本概念: 異常: 程式在運行時發生的錯誤或意外情況。 拋出異常: 使用 throw 關鍵字將異常傳遞給調用堆棧。 捕獲異常: 使用 try-catch ...
  • 優秀且經驗豐富的Java開發人員的特征之一是對API的廣泛瞭解,包括JDK和第三方庫。 我花了很多時間來學習API,尤其是在閱讀了Effective Java 3rd Edition之後 ,Joshua Bloch建議在Java 3rd Edition中使用現有的API進行開發,而不是為常見的東西編 ...
  • 框架 · 使用laravel框架,原因:tp的框架路由和orm沒有laravel好用 · 使用強制路由,方便介面多時,分多版本,分文件夾等操作 介面 · 介面開發註意欄位類型,欄位是int,查詢成功失敗都要返回int(對接java等強類型語言方便) · 查詢介面用GET、其他用POST 代碼 · 所 ...
  • 正文 下午找企業的人去鎮上做貸後。 車上聽同事跟那個司機對罵,火星子都快出來了。司機跟那同事更熟一些,連我在內一共就三個人,同事那一手指桑罵槐給我都聽愣了。司機也是老社會人了,馬上聽出來了,為那個無辜的企業經辦人辯護,實際上是為自己辯護。 “這個事情你不能怪企業。”“但他們總不能讓銀行的人全權負責, ...