學(xué)習(xí)教材為:https://wangdoc.com/javascript/bom/index.html
1.如何讓JS可以控制瀏覽器的各種功能及塘?
網(wǎng)頁內(nèi)嵌了 JavaScript 腳本,瀏覽器加載網(wǎng)頁,就會去執(zhí)行腳本桑驱,從而達到操作瀏覽器的目的,實現(xiàn)網(wǎng)頁的各種動態(tài)效果。
2.有哪些方法可以網(wǎng)頁中嵌入 JavaScript 代碼?
- <script>元素直接嵌入代碼福稳。
- <script>標簽加載外部腳本
- 事件屬性
- URL 協(xié)議
3.script標簽的type屬性有什么作用?
用來指定腳本類型瑞侮。對 JavaScript 腳本來說的圆,type屬性可以設(shè)為兩種值。
text/javascript:這是默認值半火,也是歷史上一貫設(shè)定的值越妈。如果你省略type屬性,默認就是這個值钮糖。對于老式瀏覽器梅掠,設(shè)為這個值比較好。
application/javascript:對于較新的瀏覽器店归,建議設(shè)為這個值瓤檐。
4.如何防止攻擊者篡改外部腳本?
script標簽通過設(shè)置integrity屬性娱节,寫入外部腳本的Hash簽名,用來驗證腳本的一致性祭示,從而避免攻擊者篡改外部腳本肄满。
5.網(wǎng)頁是如何加載的?
瀏覽器一邊下載 HTML 網(wǎng)頁质涛,一邊開始解析稠歉。也就是說,不等到下載完汇陆,就開始解析怒炸。
解析過程中,瀏覽器發(fā)現(xiàn)<script>元素毡代,就暫停解析阅羹,把網(wǎng)頁渲染的控制權(quán)轉(zhuǎn)交給 JavaScript 引擎勺疼。
如果<script>元素引用了外部腳本,就下載該腳本再執(zhí)行捏鱼,否則就直接執(zhí)行代碼执庐。
JavaScript 引擎執(zhí)行完畢,控制權(quán)交還渲染引擎导梆,恢復(fù)往下解析 HTML 網(wǎng)頁轨淌。
6.為什么要把腳本文件都放在網(wǎng)頁尾部加載?
加載外部腳本時看尼,瀏覽器會暫停頁面渲染递鹉,等腳本下載并執(zhí)行完,再繼續(xù)進行渲染藏斩。為了避免外部腳本加載很長時間躏结,瀏覽器就會一直等待腳本下載完成,造成網(wǎng)頁長時間失去響應(yīng)灾茁,瀏覽器呈現(xiàn)假死狀態(tài)窜觉,腳本放在網(wǎng)頁尾部加載。
DOM結(jié)構(gòu)生成之間調(diào)用DOM節(jié)點北专,javascript會報錯禀挫,如果腳本在網(wǎng)頁尾部加載就不會出現(xiàn)這種情況。
7.defer屬性和async屬性的異同拓颓?
腳本之間沒有依賴關(guān)系语婴,就使用async屬性,如果腳本之間有依賴關(guān)系驶睦,就使用defer屬性砰左。如果同時使用async和defer屬性,后者不起作用场航,瀏覽器行為由async屬性決定缠导。
都可以解決腳本文件下載阻塞網(wǎng)頁渲染的問題;
defer腳本執(zhí)行的順序溉痢,就是腳本在頁面中出現(xiàn)的順序僻造;async腳本執(zhí)行的順序,哪個腳本先下載結(jié)束孩饼,就先執(zhí)行哪個腳本髓削;
defer瀏覽器完成解析頁面才會執(zhí)行下載完成的腳本;async瀏覽器解析過程中有下載完成的腳本镀娶,就會先執(zhí)行腳本立膛;
defer只對外部加載的腳本起作用。
8.如何實現(xiàn)腳本的動態(tài)加載梯码?
<script>元素還可以動態(tài)生成宝泵,生成后再插入頁面好啰,從而實現(xiàn)腳本的動態(tài)加載。
動態(tài)生成script元素 document.creatElement('script')鲁猩;
將生成的script元素插入 document.head.appendChild(script)坎怪。
9.瀏覽器的組成?
核心是兩部分:渲染引擎和 JavaScript 解釋器(又稱 JavaScript 引擎)廓握。
10.重流和重繪的異同搅窿?
重流和重繪并不一定一起發(fā)生,重流必然導(dǎo)致重繪隙券,重繪不一定需要重流男应;
重流和重繪的觸發(fā)因素不一樣:觸發(fā)重流的因素-添加、刪除可見的DOM娱仔,元素位置改變沐飘,元素尺寸改變,頁面渲染初始化牲迫,瀏覽器窗口尺寸改變耐朴;觸發(fā)重繪的因素-某元素的背景色,邊框顏色盹憎、文字顏色改變筛峭。
11.如何理解window對象?它有哪些屬性和方法陪每?
瀏覽器里面影晓,window對象(注意,w為小寫)指當(dāng)前的瀏覽器窗口檩禾。它也是當(dāng)前頁面的頂層對象挂签,即最高一層的對象,所有其他對象都是它的下屬盼产。一個變量如果未聲明饵婆,那么默認就是頂層對象的屬性。
屬性:
- window.name屬性是一個字符串戏售,表示當(dāng)前瀏覽器窗口的名字侨核。窗口不一定需要名字,這個屬性主要配合超鏈接和表單的target屬性使用蜈项。
- window.closed屬性返回一個布爾值,表示窗口是否關(guān)閉
- window.opener屬性表示打開當(dāng)前窗口的父窗口续挟。如果當(dāng)前窗口沒有父窗口(即直接在地址欄輸入打開)紧卒,則返回null
- window.self和window.window屬性都指向窗口本身。這兩個屬性只讀诗祸。
- window.frames屬性返回一個類似數(shù)組的對象跑芳,成員為頁面內(nèi)所有框架窗口轴总,包括frame元素和iframe元素。
- window.length屬性返回當(dāng)前網(wǎng)頁包含的框架總數(shù)博个。如果當(dāng)前網(wǎng)頁不包含frame和iframe元素怀樟,那么window.length就返回0。
- window.frameElement屬性主要用于當(dāng)前窗口嵌在另一個網(wǎng)頁的情況(嵌入<object>盆佣、<iframe>或<embed>元素)往堡,返回當(dāng)前窗口所在的那個元素節(jié)點。
- window.top屬性指向最頂層窗口共耍,主要用于在框架窗口(frame)里面獲取頂層窗口虑灰。
- window.parent屬性指向父窗口。如果當(dāng)前窗口沒有父窗口痹兜,window.parent指向自身穆咐。
- window.status屬性用于讀寫瀏覽器狀態(tài)欄的文本。
方法:
- window.alert()方法彈出的對話框字旭,只有一個“確定”按鈕对湃,往往用來通知用戶某些信息。
- window.prompt()方法彈出的對話框遗淳,提示文字的下方拍柒,還有一個輸入框,要求用戶輸入信息洲脂,并有“確定”和“取消”兩個按鈕斤儿。
- window.confirm()方法彈出的對話框,除了提示信息之外恐锦,只有“確定”和“取消”兩個按鈕往果,往往用來征詢用戶是否同意。
- window.open方法用于新建另一個瀏覽器窗口一铅,類似于瀏覽器菜單的新建窗口選項陕贮。它會返回新窗口的引用,如果無法新建窗口潘飘,則返回null肮之。
- window.close方法用于關(guān)閉當(dāng)前窗口,一般只用來關(guān)閉window.open方法新建的窗口卜录。
- window.stop()方法完全等同于單擊瀏覽器的停止按鈕戈擒,會停止加載圖像、視頻等正在或等待加載的對象艰毒。
- window.moveTo()方法用于移動瀏覽器窗口到指定位置筐高。它接受兩個參數(shù),分別是窗口左上角距離屏幕左上角的水平距離和垂直距離,單位為像素柑土。
- window.moveBy()方法將窗口移動到一個相對位置蜀肘。它接受兩個參數(shù),分別是窗口左上角向右移動的水平距離和向下移動的垂直距離稽屏,單位為像素扮宠。
- window.resizeTo()方法用于縮放窗口到指定大小。
- window.resizeBy()方法用于縮放窗口狐榔。它與window.resizeTo()的區(qū)別是坛增,它按照相對的量縮放,window.resizeTo()需要給出縮放后的絕對大小荒叼。
12.Navigator 對象有哪些屬性和方法轿偎?
屬性:
- navigator.userAgent屬性返回瀏覽器的 User Agent 字符串,表示瀏覽器的廠商和版本信息被廓;
- Navigator.plugins屬性返回一個類似數(shù)組的對象坏晦,成員是 Plugin 實例對象,表示瀏覽器安裝的插件嫁乘,比如 Flash昆婿、ActiveX 等;
- Navigator.platform屬性返回用戶的操作系統(tǒng)信息蜓斧,比如MacIntel仓蛆、Win32、Linux x86_64等 挎春;
- navigator.onLine屬性返回一個布爾值看疙,表示用戶當(dāng)前在線還是離線(瀏覽器斷線);
- Navigator.language屬性返回一個字符串直奋,表示瀏覽器的首選語言能庆。該屬性只讀;
- Navigator.geolocation屬性返回一個 Geolocation 對象脚线,包含用戶地理位置的信息搁胆;
- navigator.cookieEnabled屬性返回一個布爾值,表示瀏覽器的 Cookie 功能是否打開邮绿。
方法:
- navigator.javaEnabled()方法返回一個布爾值渠旁,表示瀏覽器是否能運行 Java Applet 小程序;
- Navigator.sendBeacon()方法用于向服務(wù)器異步發(fā)送數(shù)據(jù)船逮。
- 實驗性屬性:navigator.deviceMemory顾腊;navigator.hardwareConcurrency;navigator.connection挖胃。
13.Cookie的用途有哪些杂靶?Cookie 與 HTTP 協(xié)議的關(guān)系承耿?
Cookie 主要保存狀態(tài)信息,以下是一些主要用途伪煤。
用途:
- 對話(session)管理:保存登錄、購物車等需要記錄的信息凛辣。
- 個性化信息:保存用戶的偏好抱既,比如網(wǎng)頁的字體大小、背景色等等扁誓。
- 追蹤用戶:記錄和分析用戶行為防泵。
關(guān)系:
- Cookie 由 HTTP 協(xié)議生成,也主要是供 HTTP 協(xié)議使用蝗敢。
14.AJAX 需經(jīng)過哪些步驟捷泞?
- 創(chuàng)建 XMLHttpRequest 實例;
- 發(fā)出 HTTP 請求寿谴;
- 接收服務(wù)器傳回的數(shù)據(jù)锁右;
- 更新網(wǎng)頁數(shù)據(jù)。
15.如何理解同源讶泰?
協(xié)議咏瑟、域名、端口三者皆相同痪署。