【发布时间】:2019-09-25 23:38:09
【问题描述】:
我们的移动应用(主屏幕 safari 应用)遇到了一个问题,它从 iOS 13 开始报告不支持 html5 数据库。
它尝试使用以下代码检测对 WebSQL 的支持:
function getDBType() {
if (typeof window.openDatabase == "function") {
return "WebSQL";
}
return "IndexedDB";
}
不幸的是,报告称,尽管 WebSQL 为 removed from Safari 13,但 WebSQL 仍然可用,只是稍后在尝试调用 window.openDatabase() 时出现异常。
仔细观察,似乎发生了一些奇怪的事情:
(typeof window.openDatabase == "function") == true
(typeof window.openDatabase == "undefined") == true
(typeof window.openDatabase == "randomstring") == false
window.openDatabase == [object Function] /* not native function */
测试页面:http://locutus.sorcerer.co.uk/demo/safari-openDatabase.html
所以问题是,如何正确测试适用于 safari 13 的 WebSQL 支持?
一种想法是执行以下操作来检测 Safari 13 缺乏支持(用评论解释看似毫无意义的测试)
if (typeof window.openDatabase == "function" && typeof window.openDatabase != "undefined") {
return "WebSQL";
}
旁注:可以在 iOS 上的 Safari 13 中启用 WebSQL 设置,Safari -> 高级 -> 实验功能 -> 禁用“禁用 WebSQL”选项。虽然仅适用于 Safari 应用程序,但主屏幕 safari 应用程序仍然不支持 WebSQL。
【问题讨论】: