Cordova中Web SQL被废弃的原因及iOS Cordova应用UnknownError: Web SQL is deprecated报错解决方案咨询
关于Cordova中Web SQL被废弃及报错的解决方案
嘿,这个问题我之前帮开发者处理过不少,咱们一步步来拆解:
为什么Web SQL会被标记为废弃?
Web SQL从始至终都不是W3C的正式标准,只是一个临时的实验性规范。后来W3C确定了IndexedDB作为官方推荐的客户端存储标准,各大浏览器厂商(包括iOS的WebKit内核)陆续停止对Web SQL的维护,甚至将其标记为废弃。而Cordova的WebView是基于系统自带的WebKit内核运行的,所以当你调用Web SQL API时,就会触发这个废弃提示。
解决报错的可行方案
1. 切换到IndexedDB(推荐标准方案)
IndexedDB是W3C认可的正式标准,兼容性覆盖几乎所有现代浏览器和Cordova WebView,能满足大部分本地存储需求。你可以直接使用原生API,也可以用封装库比如localForage来简化操作(它封装了IndexedDB、Web SQL等,自动降级,但优先用标准方案)。
举个简单的原生IndexedDB初始化示例:
// 打开或创建数据库 const request = indexedDB.open('sap', 1); request.onupgradeneeded = function(event) { const db = event.target.result; // 创建对象仓库 db.createObjectStore('sapStore', { keyPath: 'id' }); }; request.onsuccess = function(event) { const db = event.target.result; console.log('IndexedDB初始化成功'); // 后续可进行增删改查操作 }; request.onerror = function(event) { console.log('IndexedDB初始化失败:', event.target.error); };
2. 使用Cordova SQLite插件(性能更优)
如果你的业务依赖SQL语法操作,推荐使用cordova-sqlite-storage插件,它基于原生SQLite实现,性能比Web SQL更好,也不存在废弃问题。
步骤如下:
- 安装插件:
cordova plugin add cordova-sqlite-storage
- 初始化数据库的示例代码:
// 打开或创建数据库 var db = window.sqlitePlugin.openDatabase({ name: 'sap.db', location: 'default' // 数据库存储位置,iOS默认是Documents目录 }); // 执行事务创建表 db.transaction(function(tx) { tx.executeSql('CREATE TABLE IF NOT EXISTS sap_table (id INTEGER PRIMARY KEY, content TEXT)'); }, function(error) { console.log('事务执行失败:', error.message); }, function() { console.log('数据库初始化完成'); });
3. 不推荐:强行继续使用Web SQL
虽然有些旧版本的iOS WebView还能勉强运行Web SQL,但苹果已经逐步移除支持,未来版本大概率会完全禁用,所以不建议继续使用这个方案,避免后续兼容性问题。
内容的提问来源于stack exchange,提问作者Navanitha
相关产品推荐
相关产品推荐

