Chrome 86 現已開始推出穩定版。
以下是一些注意事項:
- File System Access API 現已推出穩定版。
- Web HID 和 Multi-screen Window Placement API 現已推出新的原始試用版。
- CSS 新增多項新功能,而其他功能。
我是 Pete LePage,在家工作和拍攝影片吧!接下來我們將一探 Chrome 86 為開發人員提供的新功能!
檔案系統存取權
您現在可以使用 <input type="file">
元素從磁碟讀取檔案。如要儲存變更,請將 download
新增至錨點標記,系統就會顯示檔案挑選器,然後儲存檔案。您無法寫入同一個已開啟的檔案。這項工作流程很麻煩。
您可以使用 File System Access API (原為 Native File System API),這個 API 已完成原始測試,現在已推出穩定版,您可以呼叫 showOpenFilePicker()
,這個 API 會顯示檔案挑選器,然後傳回檔案句柄,讓您用來讀取檔案。
async function getFileHandle() {
const opts = {
types: [
{
description: 'Text Files',
accept: {
'text/plain': ['.txt', '.text'],
'text/html': ['.html', '.htm']
}
}
]
};
return await window.showOpenFilePicker(opts);
}
如要將檔案儲存至磁碟,您可以使用先前取得的檔案句柄,或是呼叫 showSaveFilePicker()
來取得新的檔案句柄。
async function saveFile(fileHandle) {
if (!fileHandle) {
fileHandle = await window.showSaveFilePicker();
}
const writable = await fileHandle.createWritable();
await writable.write(contents);
await writable.close();
}
在寫入前,Chrome 會檢查使用者是否已授予寫入權限,如果尚未授予寫入權限,Chrome 會先提示使用者。
呼叫 showDirectoryPicker()
會開啟目錄,讓您取得檔案清單或在該目錄中建立新檔案。適用於 IDE 或與大量檔案互動的媒體播放器等。當然,在您輸入任何內容之前,使用者必須授予寫入權限。
API 還有許多其他功能,請參閱 web.dev 上的「File System Access」文章。
來源試用:WebHID
人機介面裝置 (通常稱為 HID) 會接收人類的輸入內容,或提供輸出內容給人類。人機介面裝置的長尾效應,是指系統裝置驅動程式無法存取的裝置過新、過舊或過於罕見。
WebHID API 現已推出原始試用版,可在 JavaScript 中存取這些裝置,解決上述問題。有了 WebHID,網頁遊戲就能充分運用遊戲搖桿,包括所有按鈕、搖桿、感應器、觸發條件、LED 燈和滾筒式組合等等。
butOpenHID.addEventListener('click', async (e) => {
const deviceFilter = { vendorId: 0x0fd9 };
const opts = { filters: [deviceFilter] };
const devices = await navigator.hid.requestDevice(opts);
myDevice = devices[0];
await myDevice.open();
myDevice.addEventListener('inputreport', handleInpRpt);
});
網頁式視訊通訊應用程式可以使用特定揚聲器上的電話按鈕、發起或結束通話、將音訊設為靜音,以及執行其他操作。
當然,這類功能強大的 API 只能在使用者明確選擇允許的情況下,與裝置互動。
如需更多詳細資訊、範例、如何開始使用,以及有趣的示範內容,請參閱「連線至不常見的 HID 裝置」一文。
來源試用:Multi-Screen Window Placement API
您現在可以呼叫 window.screen()
,取得瀏覽器視窗所在螢幕的屬性。但如果您使用多螢幕設定,很抱歉,瀏覽器只會告訴你目前顯示的畫面。
const screen = window.screen;
console.log(screen);
// {
// availHeight: 1612,
// availLeft: 0,
// availTop: 23,
// availWidth: 3008,
// colorDepth: 24,
// orientation: {...},
// pixelDepth: 24,
// width: 3008
// }
多螢幕 Window Placement API 會在 Chrome 86 中啟動來源測試,讓您能夠列舉與電腦連線的螢幕,並在特定螢幕上放置視窗。對於簡報應用程式、金融服務應用程式等應用程式而言,能夠在特定螢幕上放置視窗至關重要。
您必須先要求權限,才能使用 API。如不同意,則瀏覽器會在您首次嘗試使用時提示使用者。
async function getPermission() {
const opt = { name: 'window-placement' };
try {
const perm = await navigator.permissions.query(opt);
return perm.state === 'granted';
} catch {
return false;
}
}
使用者授予權限後,呼叫 window.getScreens()
會傳回承諾,並以 Screen
物件的陣列解析。
const screens = await window.getScreens();
console.log(screens);
// [
// {id: 0, internal: false, primary: true, left: 0, ...},
// {id: 1, internal: true, primary: false, left: 3008, ...},
// ]
之後,我可以在呼叫 requestFullScreen()
或放置新視窗時使用該資訊。Tom 在 web.dev 的「使用多螢幕 Window Placement API 管理多個顯示裝置」一文中提供所有詳細資訊。
其他
新的 CSS 選取器「:focus-visible
」可讓您在瀏覽器決定是否要顯示預設焦點指標時,選擇採用瀏覽器採用的相同經驗法則。
/* Focusing the button with a keyboard will
show a dashed black line. */
button:focus-visible {
outline: 4px dashed black;
}
/* Focusing the button with a mouse, touch,
or stylus will show a subtle drop shadow. */
button:focus:not(:focus-visible) {
outline: none;
box-shadow: 1px 1px 5px rgba(1, 1, 0, .7);
}
您可以使用 CSS ::marker
虛擬元素自訂清單的顏色、大小,或項目符號類型。
li::marker {
content: '😍';
}
li:last-child::marker {
content: '🤯';
}
現場也會舉辦 Chrome 開發人員高峰會,敬請持續關注我們的 YouTube 頻道,掌握更多資訊!
延伸閱讀
這份文件僅涵蓋部分重點。請參閱下方連結,瞭解 Chrome 86 的其他變更。
- Chrome 開發人員工具 (86) 新功能
- Chrome 86 淘汰與下架
- Chrome 86 適用的 ChromeStatus.com 更新
- Chrome 86 版 JavaScript 的新功能
- Chromium 來源存放區變更清單
訂閱
如要隨時掌握最新影片,請訂閱我們的 Chrome 開發人員 YouTube 頻道,這樣一來,每當我們發布新影片,你就會收到電子郵件通知,或是將我們的RSS 動態消息新增至動態消息閱讀器。
我是 Pete LePage,Chrome 87 一推出,我就會在這裡告訴你 Chrome 的新功能!