由于 indexeddb 是一种用于在客户端存储数据的方法,因此允许索引数据库查询。
这是支持的浏览器
http://caniuse.com/#feat=indexeddb
这是唯一的问题
Firefox (prior to version 37) and Safari do not support IndexedDB inside web workers.
Not supported in Chrome for iOS or other iOS WebViews.
Chrome 36 and below did not support Blob objects as indexedDB values.
Here is another similar polyfill you can try,但根据我(尽管有限)的经验,这两个 polyfill 都是错误的/不完整的。他们在 GitHub 上也有许多未解决的问题,人们报告问题。当我测试其中一个时(我忘了是哪一个),它比原生 IndexedDB 慢得多。
也许可以创建一个像样的 polyfill,但目前的 polyfill 似乎无法胜任。
我应该使用已弃用的 WebSQL 吗?
WebSQL 的问题在于它永远不会在 IE 或 Firefox 中得到支持。如果您只针对移动浏览器,您可能会摆脱 WebSQL,至少在 Firefox OS 或 Windows Phone 抢占重要市场份额之前。
是否有计划在未来为所有不支持的浏览器支持 IndexedDB?
让我们说清楚。你问的是苹果,因为其他人都在他们最新的浏览器中支持 IndexedDB(iOS Chrome 使用苹果的渲染引擎,因为苹果不会让他们做任何其他事情)。
Apple 不仅不支持 IndexedDB,而且他们也没有公开谈论它(据我所知......而且我已经进行了大量搜索)。这看起来很奇怪。因此,据我所知,没有人知道 Apple 是否计划支持 IndexedDB。我心中的阴谋论者认为他们可能是在试图破坏 HTML5 应用程序以迫使人们编写原生应用程序,但这纯粹是猜测。
总的来说,这让我们的开发人员处于非常糟糕的境地。没有好的跨平台解决方案。我建议您向 Apple 投诉。这就是我所做的,我已经询问了想要在 iOS 上使用我的基于 IndexedDB 的应用程序的用户也这样做。仍然没有来自 Apple 的消息。
更新 - 如 WWDC 2014 所述,iOS 8 现在支持 Indexeddb - 但不幸的是 it's broken pretty badly。
还要考虑 子资源 完整性 -
子资源完整性使浏览器能够验证文件是否在没有意外操作的情况下交付。
没有知识问题?到目前为止?
我建议你可以一起去
如果移动设备是您的主要目标,则基于
子资源的解决方案
indexeddb 如果移动设备不是您的主要目标并使用公开可用的移动设备实现
如果以上所有内容对你来说都太复杂了,那么
var localCache = {
data: {},
remove: function (url) {
delete localCache.data[url];
},
//a cached version exists
exist: function (url) {
return !!localCache.data[url] && ((new Date().getTime() - localCache.data[url]._) < localCache.timeout);
},
get: function (url) {
console.log('Getting in cache for url' + url); //log only!
return localCache.data[url].data;
},
set: function (url, cachedData, callback) {
localCache.remove(url);
localCache.data[url] = {
_: new Date().getTime(),
data: cachedData
};
if ($.isFunction(callback)) callback(cachedData);
},
timeout: 600, //in seconds
};
$.ajaxPrefilter(function (options, originalOptions, jqXHR) {
if (options.cache) {
var complete = originalOptions.complete || $.noop,
url = originalOptions.url;
//remove jQuery cache as you have your own localCache
options.cache = false;
options.beforeSend = function () {
if (localCache.exist(url)) {
complete(localCache.get(url));
return false;
}
return true;
};
options.complete = function (data, textStatus) {
localCache.set(url, data, complete);
};
}
});
$(function () {
var url = 'your url goes here';
$('#ajaxButton').click(function (e) {
$.ajax({
url: url,
data: {
test: 'value'
},
cache: true,
complete: doSomething
});
});
});
//ToDo after ajax call finishes, or cached version retrived
function doSomething(data) {
console.log(data);
}