cordova - Ionic 项目 localStorage 在添加人行横道后停止工作

标签 cordova ionic-framework crosswalk-runtime

我有一个使用 localStorage 的 ionic 项目,已经工作了几个月,但是在我添加人行横道之后 localStorage 不再工作了。奇怪的是,我使用 ionic start todo-list sidemenu 创建了另一个应用程序 并使用 localStorage 创建了一个简单的 todo-list 并且工作了。

可能问题出在我的另一个应用程序中,结合了人行横道,这会冲突并破坏 localStorage

我知道我说的含糊不清,但也许有人会遇到同样的问题。

this link :

Crosswalk WebView stores data (IndexedDB, LocalStorage, etc) separately from System WebView

我是这样使用的:

window.localStorage.setItem('foo', 'bar');
window.localStorage.getItem('foo');

上面的示例,getItem 将显示 bar 值,但是如果我关闭应用程序并执行 getItem('foo') 在应用程序的另一部分,该值返回 null

此问题仅在 Android 设备(已测试 4.1、4.3 和 4.4)上发生,网络浏览器正常运行。

为了记录,这是项目中安装的插件:

com.ionic.keyboard 1.0.4 "Keyboard"
com.phonegap.plugins.PushPlugin 2.4.0 "PushPlugin"
cordova-plugin-console 1.0.0 "Console"
cordova-plugin-crosswalk-webview 1.2.0 "Crosswalk WebView Engine"
cordova-plugin-dialogs 1.1.0 "Notification"
cordova-plugin-geolocation 1.0.0 "Geolocation"
cordova-plugin-inappbrowser 1.0.0 "InAppBrowser"
cordova-plugin-network-information 1.0.0 "Network Information"
cordova-plugin-splashscreen 2.0.0 "Splashscreen"
cordova-plugin-statusbar 1.0.0 "StatusBar"
cordova-plugin-vibration 1.1.0 "Vibration"
cordova-plugin-whitelist 1.0.0 "Whitelist"
nl.x-services.plugins.toast 2.0.5 "Toast"

最佳答案

我遇到了同样的问题(使用 cordova-android 4.0 和 Crosswalk 13.42.319.11)。在添加 Crosswalk 之前,localStorage 按预期工作。添加 Crosswalk 后,如果应用程序卸载并重新启动,任何添加到本地存储的新项目都不会持久化。

通过排除过程,我在我们的应用程序中发现了以下代码似乎触发了问题:

// The purpose of this code is to check whether Safari browser is in "Private" browsing mode,
// in which case the localStorage API is available but throws an exception when setItem() is called:
// "QuotaExceededError: DOM Exception 22: An attempt was made to add something to storage that exceeded the quota."

function testLocalStorageIsSupported() {
    try {
        if (window.localStorage && window.localStorage.setItem && window.localStorage.getItem && window.localStorage.removeItem) {
            // Store an arbitrary value
            var storedValue = (new Date().valueOf()).toString();
            window.localStorage.setItem("__LocalStorageIsSupported__", storedValue);

            var loadedValue = window.localStorage.getItem("__LocalStorageIsSupported__");
            window.localStorage.removeItem("__LocalStorageIsSupported__");

            // If loaded value matches the stored value then consider localStorage to be supported.
            return (storedValue == loadedValue);
        }

        return false;
    } catch (e) {
        console.log("LocalStorage: Caught an error testing availability of localstorage: " + e);
        return false;
    }
}

此代码在收到设备就绪事件后被调用。从应用程序中删除这段代码为我解决了这个问题。

我将问题代码缩减为一行:

window.localStorage.setItem("__LocalStorageIsSupported__", (new Date().valueOf()).toString())

我做了一些进一步的测试,创建了一个空白的 cordova-android 4.0 应用程序,并添加了 Crosswalk。最初 localStorage 正常工作。将上述单行代码添加到 deviceready 事件的回调中后,localStorage 停止持久化。

关于cordova - Ionic 项目 localStorage 在添加人行横道后停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30360208/

相关文章:

javascript - 检查 div 值并更新 React 中的类

android - Ionic - 应用程序没有足够的地理定位权限

javascript - 在angularjs中从本地存储中检索对象数组

android - 错误:软件包org.xwalk.core不存在Android Studio和Gradle

jquery - 多次调用 get 函数

ios - 如何在 Ionic 3 中打开静音/静音开关时播放音频?

java - 我正在尝试设置我的 JAVA_HOME 路径以使用我的 javac.exe?

node.js - 让 Cordova 等待异步钩子(Hook)完成

android - intel xdk、appmobi、crosswalk有什么区别?

android - intel xdk crosswalk 应用程序未安装的原因是什么