【问题标题】:crosswalk+cordova indexedDB overwritten on app update人行横道+cordova indexedDB 在应用程序更新时被覆盖
【发布时间】:2016-12-31 13:57:54
【问题描述】:

我正在使用 pouchDB 作为存储来制作一个包含 crosswalk+cordova 的混合应用程序。问题是,当我安装新版本(在 android 上)时,浏览器 indexedDB/webSQL 会被完全覆盖,所以所有用户数据......有没有办法在 android/ios 上更新混合应用程序以保留用户数据? 谢谢

【问题讨论】:

  • 您是在更新应用还是卸载/重新安装?我有一个应用程序在生产中将近一年,但我从来没有遇到过这个问题。
  • 该应用还没有在安卓商店中,所以我在开发阶段重新安装。更新如何工作?这不是重新安装吗?

标签: cordova pouchdb crosswalk


【解决方案1】:

IndexedDB 与您的基本 URL 相关联

如果您更改应用名称或config.xml 中的基本 URL(内容 src),您将无法访问之前的。

首先,我正在使用 localforage 库和 cordova s​​qlite 插件来消除浏览器错误和实现细节。 iOS 可能会引起一些头痛,请注意

我在config.xml的内容输入:

<content src="index.html" />

我的相关插件相关条目in config.xml:

<plugin name="cordova-plugin-sqlite-2" spec="~1.0.4" />
    <plugin name="cordova-plugin-crosswalk-webview" spec="~2.1.0">
        <variable name="XWALK_VERSION" value="21+" />
        <variable name="XWALK_LITEVERSION" value="xwalk_core_library_canary:17+" />
        <variable name="XWALK_COMMANDLINE" value="--disable-pull-to-refresh-effect" />
        <variable name="XWALK_MODE" value="embedded" />
        <variable name="XWALK_MULTIPLEAPK" value="false" />
    </plugin>

这是我在 Javascript 应用程序中的数据库初始化函数(它返回一个承诺):

    function initDB() {

    let driver = [localforage.INDEXEDDB, localforage.WEBSQL]
    //force shim
    if (platform() === constants.PLATFORM_IOS) {
        if (window.sqlitePlugin) {
            //WEBSQL shim throgh sqlite2
            window.openDatabase = window.sqlitePlugin.openDatabase
        }
        driver = localforage.WEBSQL
    }


    let opts = {
        driver: driver,
        name: constants.DBName + '_forage',
        version: constants.appVersion,
        size: 4980736
    }

    localforage.config(opts)


    let stores = {
        state: localforage.createInstance({storeName: 'state'}),
        api_cache: localforage.createInstance({storeName: 'apiCache'})
    }

    const keys = Object.keys(stores)

    let p = new Promise((res, rej)=> {
        let r = 0;

        function check() {
            r++
            if (r === keys.length) {
                res(stores)
            }
        }
        keys.forEach(k=>stores[k].ready(check))

    })

    return p

}

localforage 可以在这里找到:https://github.com/localForage/localForage.git

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多