Является ли локальное хранилище для приложения Phonegap на устройстве Android отдельно от встроенного браузера?

Мой вопрос по существу является продолжением или пояснением к этому вопросу.

У меня есть Android-приложение, созданное с использованием Javascript и Служба сборки Adobe Phonegap, и я использую "локальное хранилище" для хранения данных на устройства.

Из этого другого вопроса я узнал, что данные, хранящиеся в локальном хранилище, по существу "постоянны", поскольку он будет оставаться на устройстве бесконечно, если только пользователь не действует на него, вручную очистив кэш для приложения или удалив приложение (и, возможно, другие необычные обстоятельства, с которыми я готов жить).

Однако часть принятого ответа меня сбила с толку, потому что он начал размывать линии между разговором о браузере телефона и разговором о приложении Phonegap.

Что мне непонятно, если приложение на Android с помощью Phonegap использует тот же кеш, что и телефон, встроенный в браузер. Является ли Phonegap по существу расширением существующего браузера, или же он имеет отдельный автономный автономный браузер?

Критически, если пользователь очистит кеш в своем браузере, это повлияет на установленное приложение на основе Phonegap?

Ответ 1

Так как Phonegap использует Webiview для рендеринга вашего приложения: WebView и Phonegap.

И по соображениям безопасности каждое приложение, использующее WebView, имеет свой собственный кеш и историю. "Ни один пользователь или ОС не хочет, чтобы такие данные были доступны сторонним приложениям". Итак, вкратце, ваше приложение сохранит свою историю и данные в своей папке с кешем и будет удалено в одном из следующих случаев:

  • Пользователь удалил их вручную.
  • Пользователь использовал экран настроек приложения и удалил их.
  • Приложение удалено.

Чтобы узнать больше об этом. взгляните на кеш WebView: Управление файлами cookie и

Ответ 2

Нет, кеш, созданный в браузере в приложении, может быть удален только с помощью методов:

window.localStorage.removeItem("key");

или

window.localStorage.clear();

или удаление приложения

или ручное действие (удалить данные/кеш) в диспетчере приложений.

Но лучший ответ - провести эксперимент самостоятельно и посмотреть, что произойдет.

Ответ 3

Да, это отдельно, но есть время, когда вам нужно передать переменную какого-либо типа в браузер приложений. Это делает кодирование намного проще передавать элемент ls из текущего веб-представления в другой, как в iOS.

Вот что я сделал в PhoneGap

Я использую InAppBrowser executeScript(), чтобы передать копию текущего webviews localStorage другому.

//add the listener to detect when the page loads after inappbrowser is called into view
ref.addEventListener('loadstop', function(){
     ref.executeScript({code: 'SetInAppBrowserLocalStorage(\''+localStorage+'\');'});
});

//In your inAppBrowser page you create a function that  will get called on loadStop
//This will pass "all" the contents of the main webviws localStorage to the webview 
//created by InAppBrowser
function SetInAppBrowserLocalStorage(localStorageThatWasPassed){
    localStorage = localStorageThatWasPassed;
};

Вы также можете очистить localStorage, созданный SetInAppBrowserLocalStorage(), прежде чем использование также покинет это представление.

Протестировано и работает 100%:)... дайте мне знать, если вам нужна дополнительная помощь

*** UPDATE *****

Это все еще работает... но не последовательно. После долгих испытаний я понимаю, что это просто не путь. Иногда данные просто не передаются достаточно быстро, когда создается экземпляр inappbrowser. Я поговорил с ребятами из cordova, и там они сказали, что это не безопасный способ делать что-то... Я понял, что... но мой ответ на них был, что если я просто хочу передать переменные ls между страницами в моем приложении... это даже не доступно из Интернета... Я честно не понимаю, почему элементы ls не могут быть доступны глобально в приложении, как в iOS и остальной части Интернета. Если у кого-то есть лучшее решение, я хотел бы услышать об этом.

Ответ 4

Введя этот параметр в свой mainActivity (который расширяет Droidgap.)

  super.appView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);

Мы делаем наше приложение не для хранения кеша.