Chrome 72釋出Beta版,除了加入新的JavaScript功能外,也為了要阻止網頁惡意行為,加入了使用者觸發查詢(User Activation Query)API,另外,還宣布即將棄用FTP、TLS 1.0和TLS 1.1等協定。

Chrome現在允許在腳本做公開類別域(Public Class Fields)的宣告,而這是JavaScript中類別域宣告的第一個部分,私用類別域(Private Class Fields)的支援則會在之後推出。要實作公開類別域,需要在類別宣告中,以及任何成員函式之外進行宣告,可以預先進行初始化但也並非必要。

官方表示,宣告類別域能讓類別定義更加自我文件(Self-documenting)化,不需要額外註記,就能使其他開發者理解程式碼意義,而這是因為這些域總是存在,因此能歷經較少的轉換。

此外,為了阻止擾人的網頁行為,Chrome 72將提供使用者觸發查詢API,以確定網頁行為是否有使用者參與,使用的情境包括在requestFullScreen()、autoplay以及window.open(),同時也允許在嵌入的iframes檢查postMessage()呼叫,是否發生在使用者觸發的上下文中。

新的userActivation屬性可以同時在navigator和MessageEvent上使用,支援的屬性包括hasBeenActive和isActive。hasBeenActive能指出關聯視窗是否在其生命週期中,發生過使用者觸發事件,但這個屬性不反應當前任務是否由使用者觸發,而isActive則能查詢當前視窗,是否在其生命週期中存在用戶觸發行為。

而postMessage()方法現在則在Window、Worker以及MessagePort物件使用選項參數,該物件存在參數並加入includeUserActivation布林屬性,用來通知訊息回條是否存在使用者觸發行為。

除了公開類別域和使用者觸發查詢API,Chrome 72也還更新了一系列的功能。當請求會互相覆寫時,快取API現在會拒絕addAll(),由於Cache.prototype.addAll() API能夠一次將多個項目加入快取中,在過去會違反規範要求,而現在每一個請求和回應,都會避免覆蓋同一個呼叫中的另一個項目,Chrome透過存儲後面項目,並忽略之前的項目來解決此類衝突。

Chrome現在支援RTCPeerConnection.connectionState,這是根據低層ICE和DTLS傳輸的對等連接傳輸狀態計算的聚合值,其目的是要提供比只支援基於ICE傳輸的RTCPeerConnection.iceConnectionState更完整的連接狀態概述。另外,在第三階段ECMAScript提案變更了JSON.stringify(),以防止回傳錯誤格式的Unicode字串,現在也將在Chrome 72中獲得更新。

除此之外,Chrome 72將不允許在卸載頁面得期間使用window.open()彈出視窗,Chrome彈出視窗阻止程式將禁止該操作,但執行與否取決於彈出阻止程式是否啟用。同時,HTTP公鑰固定(HTTP-Based Public Key Pinning,HPKP)也會被移除,HTTP公鑰固定允許網站發送HTTP標頭,該標頭固定網站憑證鏈中存在的多個公鑰,但由於採用率低而且存在拒絕服務和惡意固定的風險,因此官方決定移除。

官方還提到,FTP是一種不安全的老舊協定,應該要逐漸棄用,而第一個步驟便是棄用FTP伺服器渲染資源,並且直接進行下載動作,Chrome仍會生成目錄列表,但任何非目錄列表都將被下載,而不會在瀏覽器中顯示。

另外,Chrome 72還會棄用TLS 1.0和TLS 1.1,TLS (Transport Layer Security) 是保護HTTPS一項歷史悠久的協定,存在將近二十年的TLS 1.0及其前身SSL都有許多缺陷,支援TLS 1.2是徹底解決之道,在Chrome 72中棄用並預計將在2020年初的Chrome 81徹底淘汰。


Advertisement

更多 iThome相關內容