Ионный проект localStorage перестает работать после добавления пешеходного перехода

У меня есть ионный проект, который использует localStorage, работает в течение нескольких месяцев, но после того, как я добавил пешеходный переход localStorage больше не работает Странно то, что я создаю еще одно приложение с ionic start todo-list sidemenu и создал простой список задач, используя localStorage и работал.

Вероятно, проблема в том, что в моем другом приложении в сочетании с пешеходным переходом что-то противоречит и разрушает localStorage,

Я знаю, что я сказал, чтобы расплывчато, но, возможно, кто-то мог иметь эту же проблему.

По этой ссылке:

Crosswalk WebView хранит данные (IndexedDB, LocalStorage и т. Д.) Отдельно от 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"

1 ответ

У меня была такая же проблема (с использованием 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;
    }
}

Этот код вызывался после получения события deviceready. Удаление этого кода из приложения решило проблему для меня.

Я сократил код проблемы до одной строки:

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

Я провел дополнительное тестирование, создав пустое приложение cordova-android 4.0 и добавив Crosswalk. Изначально localStorage работает как надо. После добавления вышеупомянутой единственной строки кода в обратный вызов для события deviceready локальное хранилище перестало сохраняться.

Другие вопросы по тегам