Czy pamięć lokalna aplikacji Phonegap na urządzeniu z systemem Android jest oddzielona od wbudowanej przeglądarki?

Moje pytanie jest zasadniczo kontynuacją lub wyjaśnieniem tego pytania .

Mam aplikację na Androida zbudowaną przy użyciu Javascript i usługi PhoneGap Build firmy Adobe i używam "local storage" do przechowywania danych na urządzeniu.

Z tego innego pytania dowiedziałem się, że dane przechowywane w pamięci lokalnej są zasadniczo "stałe", ponieważ pozostaną na urządzeniu na czas nieokreślony, chyba że użytkownik działa na nim ręcznie czyszcząc pamięć podręczną aplikacji lub usuwając app (i może inne nietypowe okoliczności, z którymi jestem gotów żyć).

Jednak część zaakceptowanej odpowiedzi była dla mnie myląca, ponieważ zaczęła rozmywać linie między mówieniem o przeglądarce telefonu a mówieniem o aplikacji Phonegap.

Nie jest dla mnie jasne, czy aplikacja na Androida korzystająca z Phonegap używa tej samej pamięci podręcznej, co wbudowana w telefon przeglądarka. Czy Phonegap jest zasadniczo rozszerzeniem istniejącej przeglądarki, czy też jest jej własną oddzielna samodzielna i samodzielna przeglądarka?

Krytycznie, jeśli użytkownik wyczyści pamięć podręczną w swojej przeglądarce, będzie to miało wpływ na zainstalowaną aplikację opartą na Phonegap?

Author: Community, 2013-03-03

4 answers

Ponieważ Phonegap używa Webiview do renderowania aplikacji: WebView i Phonegap .

I ze względów bezpieczeństwa każda aplikacja, która używa WebView ma swoją własną pamięć podręczną i historię. "Żaden użytkownik ani system operacyjny nie chce, aby takie dane były dostępne dla aplikacji innych firm". Krótko mówiąc, twoja aplikacja zachowa własną historię i dane w folderze pamięci podręcznej i zostanie usunięta w jednym z następujących przypadków:]}

  • użytkownik ręcznie je usunął.
  • Użytkownik użył ekranu ustawień aplikacji i usunął oni.
  • Aplikacja odinstalowana.

Aby przeczytać więcej na ten temat. spójrz na WebView cache: Zarządzanie Plikami Cookie i oknami

 19
Author: Mr.Me,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-03 10:19:32

Nie, Pamięć podręczna utworzona w przeglądarce w aplikacji może być usunięta tylko metodami:

window.localStorage.removeItem("key");

Lub

window.localStorage.clear();

Lub odinstalowanie aplikacji

Lub ręczne działanie (usuwanie danych/pamięci podręcznej) w menedżerze aplikacji.

Ale najlepszą odpowiedzią jest zrobić eksperyment samemu i zobaczyć, co się stanie.

 2
Author: gcatalfamo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-03 10:20:07

Tak, to jest oddzielne, ale jest czas, w którym trzeba przekazać zmienną jakiegoś rodzaju do w przeglądarce aplikacji. To sprawia, że kodowanie o wiele łatwiejsze, aby przekazać element ls z bieżącego webview do innego, jak w iOS.

Oto co zrobiłem w PhoneGap

Używam InAppBrowser executeScript (), aby przekazać kopię bieżącego webviews localStorage do innego.

//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;
};

Możesz również wyczyścić localStorage utworzony przez SetInAppBrowserLocalStorage () przed use pozostawia również ten widok.

Testowany i działa w 100% :)...daj mi znać, jeśli potrzebujesz pomocy

***aktualizacja*****

To nadal działa ...ale już nie konsekwentnie. Po wielu testach zdaję sobie sprawę, że to po prostu nie jest droga do zrobienia. Czasami dane nie są przekazywane wystarczająco szybko podczas tworzenia instancji inappbrowser. Rozmawiałem z chłopakami cordova przez tam problem tracker i powiedzieli mi, że nie jest to bezpieczny sposób robienia rzeczy...Rozumiem...ale mój odpowiedzią na nie było to, co zrobić, jeśli po prostu chcę przekazać zmienne ls między Stronami w mojej aplikacji..nie są one nawet dostępne z Internetu... Szczerze mówiąc nie rozumiem, dlaczego przedmioty ls nie mogą być dostępne globalnie w aplikacji, tak jak jest w iOS i reszcie sieci. Jeśli ktoś ma lepsze rozwiązanie to chętnie o nim usłyszę.
 2
Author: greaterKing,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-28 17:38:58

Wprowadzając to ustawienie w swojej głównej aktywności (która rozszerza Droidgap.)

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

Sprawiamy, że nasza aplikacja nie przechowuje pamięci podręcznej.

 1
Author: Deepika Lalra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-02 11:23:05