Web SQL Database API,可讓您 以結構化方式將資料儲存在使用者的電腦上 (根據 SQLite 資料庫引擎) 之前, 2009 年 4 月推出 和 在 2010 年 11 月放棄。 原本是在 WebKit (支援 Safari) 中實作,且在 也就是讓 Google Chrome 採用 Blink Engine (Chrome 採用的系統)、Gecko (支援 Firefox) 從未執行 導入了這項功能 WebKit 已於 2019 年移除。
全球資訊網協會 (W3C)
鼓勵
需要網路資料庫
網路儲存空間 API
例如
localStorage
和
sessionStorage
,
或
IndexedDB。
這些技術證明瞭這些技術在鍵/值商店及
但顯然有些弱點
相似的查詢語言。使用者之所以希望網路 SQL 是有原因的,
網路 SQL 淘汰與移除步驟
- [ 完成。]Web SQL 已淘汰,並基於下列第三方環境移除: Chromium 97 ( 2022 年 1 月 4 日)。
- [ 完成。]不安全內容中的 Web SQL 存取權已於 淘汰 Chromium 105 ( 2022 年 1 月 4 日),屆時系統會顯示警告訊息 就顯示在 Chrome 開發人員工具問題面板中
- [ 完成。]不再於不安全的內容中存取 Web SQL 自 Chromium 110 推出 ( 2022 年 1 月 4 日)。一個 如要繼續使用這項功能,請參閱企業政策: Chromium 110 ( 2022 年 1 月 4 日) 至 Chromium 123 ( 2022 年 1 月 4 日)。
- [ 完成。]所有結構定義中的 Web SQL 存取權已於下列日期淘汰 Chromium 115 ( 2022 年 1 月 4 日),系統就會顯示警告訊息 。
- [淘汰試用計畫 仍能在 Chromium 117 中使用 Web SQL ( 2022 年 1 月 4 日) 至 Chromium 123 ( 2022 年 1 月 4 日)。 如要進一步瞭解淘汰試用期,請參閱 開始使用來源試用。 完成。]A 罩杯
- [ 完成。]您無法再透過所有結構定義存取 Web SQL Chromium 119。
下一步該做什麼?
剛才提過
網路儲存空間 API
例如
localStorage
敬上
和
sessionStorage
,
或
IndexedDB
標準在許多情況下是不錯的替代方式,但目前並非在所有情況中。
將儲存空間留給網頁程式開發人員的理由
隨著 Wasm 問世,SQL 或 NoSQL 解決方案得以在網路上曝光。一個範例 是 DuckDB-Wasm,另一個是 Aburd-sql。根據這些創作 因為開發人員社群可以反覆改進 解決方案的速度和品質都比瀏覽器廠商來得快。
我們不打算只移除 Web SQL,事實上,我們改用 將由開放原始碼社群負責維護的套件 不需要另外推出修正和新功能, 直接傳入瀏覽器我們的目標是讓開發人員 將資料提供給網路資料庫
更棒的是,我們希望這個範例能為 使開放原始碼資料庫蓬勃發展!發行的 檔案系統存取帳號 最後 提供全新的基本功能,可讓您 。
淘汰 Web SQL 的原因
永續發展與安全疑慮
Web SQL 規格無法永續導入,因此會受到限制 創新和新功能標準的最後一個版本 states 「使用者代理程式必須 實作 Sqlite 3.6.19 支援的 SQL 方言。
SQLite 最初並不是 旨在執行惡意 SQL 陳述式,但實作 Web SQL 的意義 瀏覽器執行這項功能的方式需要跟上資安和 穩定性修正會影響 Chromium 中更新 SQLite 的情況。這與 不符合 Web SQL 的要求與 SQLite 3.6.19 完全相同的要求。
API 形狀
Web SQL 也是能顯示其存在時間的 API。2000 年代晚期的孩子 這就是「回呼式死獄」這個很好的例子列於 (由諾蘭勞森提供) 示範。如您所見,SQL 陳述式 (使用 SQLite SQL 方言) 會以字串的形式傳遞 並轉換為資料庫方法
openDatabase(
// Name
'mydatabase',
// Version
1,
// Display name
'mydatabase',
// Estimated size
5000000,
// Creation callback
function (db) {
db.transaction(
// Transaction callback
function (tx) {
// Execute SQL statement
tx.executeSql(
// SQL statement
'create table rainstorms (mood text, severity int)',
// Arguments
[],
// Success callback
function () {
// Execute SQL statement
tx.executeSql(
// SQL statement
'insert into rainstorms values (?, ?)',
// Arguments
['somber', 6],
// Success callback
function () {
// Execute SQL statement
tx.executeSql(
// SQL statement
'select * from rainstorms where mood = ?',
// Arguments
['somber'],
// Success callback
function (tx, res) {
// Do something with the result
var row = res.rows.item(0);
console.log(
'rainstorm severity: ' +
row.severity +
', my mood: ' +
row.mood,
);
},
);
},
);
},
);
},
// Error callback
function (err) {
console.log('Transaction failed!: ' + err);
},
// Success callback);
function () {
console.log('Transaction succeeded!');
},
);
},
);
如果要執行這段程式碼 使用 Chrome 開發人員工具檢查建立的資料表。 結果如下:
缺乏實作器支援
除了弧形 API 形狀 (至少從今天的觀點來看),Mozilla 有許多 疑慮 如何利用 SQLite 建構 Web SQL:
「我們認為 [SQLite] 是向一般網路公開 API 的正確基礎 不僅如此 將 SQL 子集進行分類我們也無不希望改變 以避免日後影響網路 這些版本 (以及網路標準) 遷移至 SQLite 都是謹慎做法。"
您可以前往 former Mozillan Vladimir Vukičeviique 的網誌文章。 如需更多記錄,請參閱 W3C 網頁應用程式工作團隊分鐘數 (如果您需要進一步瞭解細節,請閱讀 IRC 記錄) 和 郵寄清單封存)。 此外, Nolan Lawson 的網誌文章 能讓您更清楚瞭解狀況
意見回饋
如果對本文所述的淘汰步驟有任何疑慮 貼文,請透過 blink-dev 郵寄清單。 這個群組的成員資格開放給所有人,但任何使用者都可以留言。
相關連結
- ChromeStatus 項目: 淘汰及移除第三方環境中的 WebSQL
- ChromeStatus 項目: 在不安全的環境中淘汰及移除 WebSQL
- 淘汰並移除意圖: 第三方內容中的 WebSQL
- 淘汰並移除意圖: 不安全內容中的 WebSQL
- Chromium 問題: 淘汰及移除第三方環境中的 WebSQL
- Chromium 問題: 在不安全的環境中淘汰及移除 WebSQL
- Chromium 問題: 淘汰並移除 WebSQL (Window#openDatabase)
- 瀏覽器中由來源私人檔案系統支援的 SQLite Wasm
特別銘謝
本文經過 Joe Medley 和 和 Ben Morss Joshua Bell。