由於 Project Fugu 團隊的其中一個目標是讓開發人員能夠在網路上執行任何特定平台應用程式可執行的操作,因此團隊一直忙於為網頁開發人員新增缺少的功能,以彌補這項應用程式差距。如果您不相信,請查看 Fugu API 追蹤器的「Shipped」部分。以下是 55 個已發布的 API,依發布時間由舊到新排序:
這份清單很長,而且我們還有更多工作要做。目前仍有幾個 API 和功能處於開發人員試用階段 (也就是已實作,但隱藏在功能旗標後方),有些則是我們已開始著手處理,還有許多功能仍在評估中。如您所見,現在還不是鬆懈下來,說「我們完成了」的時候。
來源私人檔案系統的同步檔案方法
相反地,我們並未宣告這項工作已完成,而是才剛起步。舉例來說,請參考下方圖表,該圖表顯示 navigator.storage.getDirectory()
方法的相對使用率激增,該方法用於原始私人檔案系統 (OPFS) 的進入點。例如,這個方法可用於滿足 Photoshop 的高效能儲存空間需求,而儲存空間社群自 Web SQL 開始淘汰以來,甚至在此之前,就非常有興趣採用這個方法。
隨著越來越多人使用 OPFS,我們也新增了其他規定。舉例來說,在 worker 情境中需要一組完全同步的檔案方法 (請參閱 whatwg/fs#7 瞭解背景資訊)。雖然新的網路 API 通常為非同步,但使用同步方法可在 Wasm 上下文中更輕鬆地使用 OPFS,而且由於這項作業是在 worker 中執行,因此主執行緒不會遭到封鎖。
硬體 API 的隱私權改善措施
另一個例子是硬體 API,可讓您連線至 HID、序列、USB、藍牙和 NFC 裝置。雖然部分 API 已推出一段時間,但直到最近,您仍無法忘記先前連線的裝置。不過,現在我們已為部分 API 提供 forget()
方法。舉例來說,以下是如何清除先前連線的序列裝置,以提升 API 的隱私權。
// Request a serial port.
const port = await navigator.serial.requestPort();
// Then later revoke permission to the serial port.
await port.forget();
多螢幕 Window Placement API 的細節
最後一個範例是 Multi-Screen Window Placement API,根據開發人員的意見回饋,先前 "Internal Display 1"
等通用螢幕標籤已替換為 "Built-in Retina Display"
等更有意義的標籤,方便使用者將這些標籤與多螢幕設定的螢幕建立關聯。
結論
從這三個例子中,您可以瞭解 Project Fugu 仍有許多進展。繼續或開始使用我們的 API,並提供意見回饋。由於所有 Fugu 規格都是在 GitHub 上公開開發,因此您可以在對應的 GitHub 存放區中提出規格問題,或是在現有問題中加入您的想法。如果您發現 Chrome 實作項目有錯誤,或發現實作項目與規格不同,請前往 new.crbug.com 回報錯誤。請務必盡可能提供詳細資訊,並提供簡單的操作說明,以便重現問題。
如果您擔心瀏覽器支援問題,許多 Fugu API 都能提供優異的漸進式強化功能。請參閱我的文章「SVGcode:將點陣圖轉換為 SVG 向量圖形的 PWA」,尋找靈感。我們會持續推動這些 API 進一步標準化、測試及採用其他瀏覽器。