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

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

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

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

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

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

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

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

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

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

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

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

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

 window.localStorage.removeItem("key"); 

или

 window.localStorage.clear(); 

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

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

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

Да, это отдельно, но есть время, когда вам нужно передать переменную некоторого вида в браузер приложений. Это делает кодирование намного проще передавать элемент 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%:) … дайте мне знать, если вам нужна дополнительная помощь

***ОБНОВИТЬ*****

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

Сделав эту настройку в своей mainActivity (которая расширяет Droidgap.)

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

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