| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- /*!
- {
- "name": "IndexedDB",
- "property": "indexeddb",
- "caniuse": "indexeddb",
- "tags": ["storage"],
- "polyfills": ["indexeddb"],
- "async": true
- }
- !*/
- /* DOC
- Detects support for the IndexedDB client-side storage API (final spec).
- */
- define(['Modernizr', 'prefixed', 'addTest'], function(Modernizr, prefixed, addTest) {
- // Vendors had inconsistent prefixing with the experimental Indexed DB:
- // - Webkit's implementation is accessible through webkitIndexedDB
- // - Firefox shipped moz_indexedDB before FF4b9, but since then has been mozIndexedDB
- // For speed, we don't test the legacy (and beta-only) indexedDB
- Modernizr.addAsyncTest(function() {
- var indexeddb;
- try {
- // Firefox throws a Security Error when cookies are disabled
- indexeddb = prefixed('indexedDB', window);
- } catch (e) {
- }
- if (indexeddb) {
- var testDBName = 'modernizr-' + Math.random();
- var req;
- try {
- req = indexeddb.open(testDBName);
- } catch (e) {
- addTest('indexeddb', false);
- return;
- }
- req.onerror = function(event) {
- if (req.error && (req.error.name === 'InvalidStateError' || req.error.name === 'UnknownError')) {
- addTest('indexeddb', false);
- event.preventDefault();
- } else {
- addTest('indexeddb', true);
- detectDeleteDatabase(indexeddb, testDBName);
- }
- };
- req.onsuccess = function() {
- addTest('indexeddb', true);
- detectDeleteDatabase(indexeddb, testDBName);
- };
- } else {
- addTest('indexeddb', false);
- }
- });
- function detectDeleteDatabase(indexeddb, testDBName) {
- var deleteReq = indexeddb.deleteDatabase(testDBName);
- deleteReq.onsuccess = function() {
- addTest('indexeddb.deletedatabase', true);
- };
- deleteReq.onerror = function() {
- addTest('indexeddb.deletedatabase', false);
- };
- }
- });
|