Fix #228: Uncaught [Filer Error] Your browser doesn't support IndexedDB or WebSQL.
This commit is contained in:
parent
31b062152e
commit
98cd3e6da7
|
@ -1,20 +1,19 @@
|
||||||
(function(global) {
|
var FILE_SYSTEM_NAME = require('../constants.js').FILE_SYSTEM_NAME;
|
||||||
var FILE_SYSTEM_NAME = require('../constants.js').FILE_SYSTEM_NAME;
|
var FILE_STORE_NAME = require('../constants.js').FILE_STORE_NAME;
|
||||||
var FILE_STORE_NAME = require('../constants.js').FILE_STORE_NAME;
|
var IDB_RW = require('../constants.js').IDB_RW;
|
||||||
var IDB_RW = require('../constants.js').IDB_RW;
|
var IDB_RO = require('../constants.js').IDB_RO;
|
||||||
var IDB_RO = require('../constants.js').IDB_RO;
|
var Errors = require('../errors.js');
|
||||||
var Errors = require('../errors.js');
|
|
||||||
|
|
||||||
var indexedDB = global.indexedDB ||
|
var indexedDB = global.indexedDB ||
|
||||||
global.mozIndexedDB ||
|
global.mozIndexedDB ||
|
||||||
global.webkitIndexedDB ||
|
global.webkitIndexedDB ||
|
||||||
global.msIndexedDB;
|
global.msIndexedDB;
|
||||||
|
|
||||||
function IndexedDBContext(db, mode) {
|
function IndexedDBContext(db, mode) {
|
||||||
var transaction = db.transaction(FILE_STORE_NAME, mode);
|
var transaction = db.transaction(FILE_STORE_NAME, mode);
|
||||||
this.objectStore = transaction.objectStore(FILE_STORE_NAME);
|
this.objectStore = transaction.objectStore(FILE_STORE_NAME);
|
||||||
}
|
}
|
||||||
IndexedDBContext.prototype.clear = function(callback) {
|
IndexedDBContext.prototype.clear = function(callback) {
|
||||||
try {
|
try {
|
||||||
var request = this.objectStore.clear();
|
var request = this.objectStore.clear();
|
||||||
request.onsuccess = function(event) {
|
request.onsuccess = function(event) {
|
||||||
|
@ -26,8 +25,8 @@
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
callback(e);
|
callback(e);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
IndexedDBContext.prototype.get = function(key, callback) {
|
IndexedDBContext.prototype.get = function(key, callback) {
|
||||||
try {
|
try {
|
||||||
var request = this.objectStore.get(key);
|
var request = this.objectStore.get(key);
|
||||||
request.onsuccess = function onsuccess(event) {
|
request.onsuccess = function onsuccess(event) {
|
||||||
|
@ -40,8 +39,8 @@
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
callback(e);
|
callback(e);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
IndexedDBContext.prototype.put = function(key, value, callback) {
|
IndexedDBContext.prototype.put = function(key, value, callback) {
|
||||||
try {
|
try {
|
||||||
var request = this.objectStore.put(value, key);
|
var request = this.objectStore.put(value, key);
|
||||||
request.onsuccess = function onsuccess(event) {
|
request.onsuccess = function onsuccess(event) {
|
||||||
|
@ -54,8 +53,8 @@
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
callback(e);
|
callback(e);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
IndexedDBContext.prototype.delete = function(key, callback) {
|
IndexedDBContext.prototype.delete = function(key, callback) {
|
||||||
try {
|
try {
|
||||||
var request = this.objectStore.delete(key);
|
var request = this.objectStore.delete(key);
|
||||||
request.onsuccess = function onsuccess(event) {
|
request.onsuccess = function onsuccess(event) {
|
||||||
|
@ -68,18 +67,18 @@
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
callback(e);
|
callback(e);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
function IndexedDB(name) {
|
function IndexedDB(name) {
|
||||||
this.name = name || FILE_SYSTEM_NAME;
|
this.name = name || FILE_SYSTEM_NAME;
|
||||||
this.db = null;
|
this.db = null;
|
||||||
}
|
}
|
||||||
IndexedDB.isSupported = function() {
|
IndexedDB.isSupported = function() {
|
||||||
return !!indexedDB;
|
return !!indexedDB;
|
||||||
};
|
};
|
||||||
|
|
||||||
IndexedDB.prototype.open = function(callback) {
|
IndexedDB.prototype.open = function(callback) {
|
||||||
var that = this;
|
var that = this;
|
||||||
|
|
||||||
// Bail if we already have a db open
|
// Bail if we already have a db open
|
||||||
|
@ -114,17 +113,15 @@
|
||||||
openRequest.onerror = function onerror(error) {
|
openRequest.onerror = function onerror(error) {
|
||||||
callback(new Errors.EINVAL('IndexedDB cannot be accessed. If private browsing is enabled, disable it.'));
|
callback(new Errors.EINVAL('IndexedDB cannot be accessed. If private browsing is enabled, disable it.'));
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
IndexedDB.prototype.getReadOnlyContext = function() {
|
IndexedDB.prototype.getReadOnlyContext = function() {
|
||||||
// Due to timing issues in Chrome with readwrite vs. readonly indexeddb transactions
|
// Due to timing issues in Chrome with readwrite vs. readonly indexeddb transactions
|
||||||
// always use readwrite so we can make sure pending commits finish before callbacks.
|
// always use readwrite so we can make sure pending commits finish before callbacks.
|
||||||
// See https://github.com/js-platform/filer/issues/128
|
// See https://github.com/js-platform/filer/issues/128
|
||||||
return new IndexedDBContext(this.db, IDB_RW);
|
return new IndexedDBContext(this.db, IDB_RW);
|
||||||
};
|
};
|
||||||
IndexedDB.prototype.getReadWriteContext = function() {
|
IndexedDB.prototype.getReadWriteContext = function() {
|
||||||
return new IndexedDBContext(this.db, IDB_RW);
|
return new IndexedDBContext(this.db, IDB_RW);
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = IndexedDB;
|
module.exports = IndexedDB;
|
||||||
|
|
||||||
}(this));
|
|
||||||
|
|
|
@ -1,13 +1,12 @@
|
||||||
(function(global) {
|
var FILE_SYSTEM_NAME = require('../constants.js').FILE_SYSTEM_NAME;
|
||||||
var FILE_SYSTEM_NAME = require('../constants.js').FILE_SYSTEM_NAME;
|
var FILE_STORE_NAME = require('../constants.js').FILE_STORE_NAME;
|
||||||
var FILE_STORE_NAME = require('../constants.js').FILE_STORE_NAME;
|
var WSQL_VERSION = require('../constants.js').WSQL_VERSION;
|
||||||
var WSQL_VERSION = require('../constants.js').WSQL_VERSION;
|
var WSQL_SIZE = require('../constants.js').WSQL_SIZE;
|
||||||
var WSQL_SIZE = require('../constants.js').WSQL_SIZE;
|
var WSQL_DESC = require('../constants.js').WSQL_DESC;
|
||||||
var WSQL_DESC = require('../constants.js').WSQL_DESC;
|
var u8toArray = require('../shared.js').u8toArray;
|
||||||
var u8toArray = require('../shared.js').u8toArray;
|
var Errors = require('../errors.js');
|
||||||
var Errors = require('../errors.js');
|
|
||||||
|
|
||||||
function WebSQLContext(db, isReadOnly) {
|
function WebSQLContext(db, isReadOnly) {
|
||||||
var that = this;
|
var that = this;
|
||||||
this.getTransaction = function(callback) {
|
this.getTransaction = function(callback) {
|
||||||
if(that.transaction) {
|
if(that.transaction) {
|
||||||
|
@ -20,8 +19,8 @@
|
||||||
callback(transaction);
|
callback(transaction);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
WebSQLContext.prototype.clear = function(callback) {
|
WebSQLContext.prototype.clear = function(callback) {
|
||||||
function onError(transaction, error) {
|
function onError(transaction, error) {
|
||||||
callback(error);
|
callback(error);
|
||||||
}
|
}
|
||||||
|
@ -32,8 +31,8 @@
|
||||||
transaction.executeSql("DELETE FROM " + FILE_STORE_NAME + ";",
|
transaction.executeSql("DELETE FROM " + FILE_STORE_NAME + ";",
|
||||||
[], onSuccess, onError);
|
[], onSuccess, onError);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
WebSQLContext.prototype.get = function(key, callback) {
|
WebSQLContext.prototype.get = function(key, callback) {
|
||||||
function onSuccess(transaction, result) {
|
function onSuccess(transaction, result) {
|
||||||
// If the key isn't found, return null
|
// If the key isn't found, return null
|
||||||
var value = result.rows.length === 0 ? null : result.rows.item(0).data;
|
var value = result.rows.length === 0 ? null : result.rows.item(0).data;
|
||||||
|
@ -57,8 +56,8 @@
|
||||||
transaction.executeSql("SELECT data FROM " + FILE_STORE_NAME + " WHERE id = ?;",
|
transaction.executeSql("SELECT data FROM " + FILE_STORE_NAME + " WHERE id = ?;",
|
||||||
[key], onSuccess, onError);
|
[key], onSuccess, onError);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
WebSQLContext.prototype.put = function(key, value, callback) {
|
WebSQLContext.prototype.put = function(key, value, callback) {
|
||||||
// We do extra work to make sure typed arrays survive
|
// We do extra work to make sure typed arrays survive
|
||||||
// being stored in the db and still get the right prototype later.
|
// being stored in the db and still get the right prototype later.
|
||||||
if(Object.prototype.toString.call(value) === "[object Uint8Array]") {
|
if(Object.prototype.toString.call(value) === "[object Uint8Array]") {
|
||||||
|
@ -78,8 +77,8 @@
|
||||||
transaction.executeSql("INSERT OR REPLACE INTO " + FILE_STORE_NAME + " (id, data) VALUES (?, ?);",
|
transaction.executeSql("INSERT OR REPLACE INTO " + FILE_STORE_NAME + " (id, data) VALUES (?, ?);",
|
||||||
[key, value], onSuccess, onError);
|
[key, value], onSuccess, onError);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
WebSQLContext.prototype.delete = function(key, callback) {
|
WebSQLContext.prototype.delete = function(key, callback) {
|
||||||
function onSuccess(transaction, result) {
|
function onSuccess(transaction, result) {
|
||||||
callback(null);
|
callback(null);
|
||||||
}
|
}
|
||||||
|
@ -90,18 +89,18 @@
|
||||||
transaction.executeSql("DELETE FROM " + FILE_STORE_NAME + " WHERE id = ?;",
|
transaction.executeSql("DELETE FROM " + FILE_STORE_NAME + " WHERE id = ?;",
|
||||||
[key], onSuccess, onError);
|
[key], onSuccess, onError);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
function WebSQL(name) {
|
function WebSQL(name) {
|
||||||
this.name = name || FILE_SYSTEM_NAME;
|
this.name = name || FILE_SYSTEM_NAME;
|
||||||
this.db = null;
|
this.db = null;
|
||||||
}
|
}
|
||||||
WebSQL.isSupported = function() {
|
WebSQL.isSupported = function() {
|
||||||
return !!global.openDatabase;
|
return !!global.openDatabase;
|
||||||
};
|
};
|
||||||
|
|
||||||
WebSQL.prototype.open = function(callback) {
|
WebSQL.prototype.open = function(callback) {
|
||||||
var that = this;
|
var that = this;
|
||||||
|
|
||||||
// Bail if we already have a db open
|
// Bail if we already have a db open
|
||||||
|
@ -148,14 +147,12 @@
|
||||||
transaction.executeSql("CREATE TABLE IF NOT EXISTS " + FILE_STORE_NAME + " (id unique, data TEXT);",
|
transaction.executeSql("CREATE TABLE IF NOT EXISTS " + FILE_STORE_NAME + " (id unique, data TEXT);",
|
||||||
[], createIndex, onError);
|
[], createIndex, onError);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
WebSQL.prototype.getReadOnlyContext = function() {
|
WebSQL.prototype.getReadOnlyContext = function() {
|
||||||
return new WebSQLContext(this.db, true);
|
return new WebSQLContext(this.db, true);
|
||||||
};
|
};
|
||||||
WebSQL.prototype.getReadWriteContext = function() {
|
WebSQL.prototype.getReadWriteContext = function() {
|
||||||
return new WebSQLContext(this.db, false);
|
return new WebSQLContext(this.db, false);
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = WebSQL;
|
module.exports = WebSQL;
|
||||||
|
|
||||||
}(this));
|
|
||||||
|
|
|
@ -1,19 +1,18 @@
|
||||||
(function(global) {
|
var Filer = require("../..");
|
||||||
var Filer = require("../..");
|
|
||||||
|
|
||||||
var indexedDB = global.indexedDB ||
|
var indexedDB = global.indexedDB ||
|
||||||
global.mozIndexedDB ||
|
global.mozIndexedDB ||
|
||||||
global.webkitIndexedDB ||
|
global.webkitIndexedDB ||
|
||||||
global.msIndexedDB;
|
global.msIndexedDB;
|
||||||
|
|
||||||
var needsCleanup = [];
|
var needsCleanup = [];
|
||||||
if(global.addEventListener) {
|
if(global.addEventListener) {
|
||||||
global.addEventListener('beforeunload', function() {
|
global.addEventListener('beforeunload', function() {
|
||||||
needsCleanup.forEach(function(f) { f(); });
|
needsCleanup.forEach(function(f) { f(); });
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function IndexedDBTestProvider(name) {
|
function IndexedDBTestProvider(name) {
|
||||||
var _done = false;
|
var _done = false;
|
||||||
var that = this;
|
var that = this;
|
||||||
|
|
||||||
|
@ -49,8 +48,6 @@
|
||||||
|
|
||||||
this.init = init;
|
this.init = init;
|
||||||
this.cleanup = cleanup;
|
this.cleanup = cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = IndexedDBTestProvider;
|
module.exports = IndexedDBTestProvider;
|
||||||
|
|
||||||
}(this));
|
|
||||||
|
|
|
@ -1,15 +1,13 @@
|
||||||
(function(global) {
|
var Filer = require('../..');
|
||||||
|
|
||||||
var Filer = require('../..');
|
var needsCleanup = [];
|
||||||
|
if(global.addEventListener) {
|
||||||
var needsCleanup = [];
|
|
||||||
if(global.addEventListener) {
|
|
||||||
window.addEventListener('beforeunload', function() {
|
window.addEventListener('beforeunload', function() {
|
||||||
needsCleanup.forEach(function(f) { f(); });
|
needsCleanup.forEach(function(f) { f(); });
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function WebSQLTestProvider(name) {
|
function WebSQLTestProvider(name) {
|
||||||
var _done = false;
|
var _done = false;
|
||||||
var that = this;
|
var that = this;
|
||||||
|
|
||||||
|
@ -40,8 +38,6 @@
|
||||||
|
|
||||||
this.init = init;
|
this.init = init;
|
||||||
this.cleanup = cleanup;
|
this.cleanup = cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = WebSQLTestProvider;
|
module.exports = WebSQLTestProvider;
|
||||||
|
|
||||||
}(this));
|
|
||||||
|
|
Loading…
Reference in New Issue