2

我想开发一个使用浏览器与用户交互的应用程序。该应用程序将可脱机使用,并可通过 zip 分发。

我想执行的功能将由 HTML、CSS、JS 处理,我想利用 IndexedDB 功能。

我遇到了 IndexedDB (Chrome) 的问题,因为相同的代码可以在在线空间中工作,但不能来自本地硬盘驱动器位置 (file://)。

参考例子:http: //jsfiddle.net/FwuUD/

(function() {

    var db;
    var dbreq = indexedDB.open("TestApp", 2);

    dbreq.onsuccess = function(e) {
        alert("Database created");
        db = e.target.result;

        var employeeStore = db.createObjectStore (
            "employees",
            {keyPath: "id"}
        );

    };

    dbreq.onerror = function(e) {
        alert("Database Error: " + e.target.errorCode);
    };

    dbreq.onupgradeneeded = function(e) {
        alert("Database upgrade needed");
    };

})();

有什么建议么?

4

3 回答 3

2

indexedDB API 仅适用于网络服务器。当您使用文件系统导航到它时,它将不起作用。indexedDB API 需要一个域上下文才能工作,而文件系统不提供。简而言之,您需要一个 url 才能使用 api。

于 2013-03-29T06:10:27.217 回答
2

出于安全考虑,从 file:/// 运行时禁用 IndexedDB。目前尚不清楚您是否控制浏览器参数。如果你这样做了,你可以传递 --allow-file-access-from-files 这将允许 IndexedDB 从 file:/// 原点工作。

于 2013-03-30T02:05:15.753 回答
2

如果有人正在寻找这个 6 年前的问题的更新答案,Chrome 和 Safari 现在都允许本地 HTML 文件访问 IndexedDB API,而无需本地服务器。IE 似乎继续坚持这一点。不确定 Edge 或 Firefox。

于 2019-09-11T01:36:30.830 回答