Android设备上的Phonegap应用的本地存储是否与内置浏览器分开?

时间:2013-03-03 10:08:39

标签: android cordova local-storage

我的问题基本上是对this question的跟进或澄清。

我有一个使用Javascript和Adobe's Phonegap Build service构建的Android应用,我正在使用“本地存储”在设备上存储数据。

从另一个问题,我了解到存储在本地存储中的数据基本上是“永久性的”,因为它将无限期地保留在设备上,除非用户通过手动清除应用程序的缓存或删除应用程序来对其进行操作(也许是我愿意忍受的其他不寻常的情况)。

然而,部分accepted answer让我感到困惑,因为它开始模糊谈论手机浏览器和谈论Phonegap应用之间的界限。

我不清楚的是,使用Phonegap的Android上的应用是否使用相同的缓存作为手机内置的浏览器。 Phonegap本质上是现有浏览器工具的扩展,还是它自己独立的独立浏览器?

重要的是,如果用户在其浏览器中清除缓存,是否会影响基于Phonegap的已安装应用?

4 个答案:

答案 0 :(得分:19)

由于Phonegap使用Webiview呈现您的应用:WebView and Phonegap

出于安全原因,使用WebView的每个应用都有自己的缓存和历史记录。 “没有用户或操作系统希望第三方应用程序访问此类数据”。 简而言之,您的应用程序将在其缓存文件夹中保留自己的历史记录和数据,并将在以下某种情况下删除:

  • 用户手动删除它们。
  • 用户使用了应用设置屏幕并将其删除。
  • 已卸载应用程序。

详细了解此信息。看一下WebView缓存:Cookie and window management

答案 1 :(得分:2)

不,只能使用以下方法删除在应用内浏览器中创建的缓存:

window.localStorage.removeItem("key");

window.localStorage.clear();

或app uninstall

或应用程序管理器中的手动操作(删除数据/缓存)。

但最好的答案是自己做一个实验,看看会发生什么。

答案 2 :(得分:2)

是的,它是独立的,但有时您需要将某种变量传递给In App Browser。它使编码更容易将ls项从当前webview传递到另一个像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;
};

您也可以在使用离开该视图之前清除由SetInAppBrowserLocalStorage()创建的localStorage。

经过100%的测试和工作:)...如果您需要更多帮助,请告诉我

<强> *** ***** UPDATE

这仍然有效...但不再一致。经过多次测试后,我意识到这根本不是可行的方法。有时,在创建inappbrowser实例时,数据传递的速度不够快。我通过问题跟踪器与cordova人谈过,他们告诉我这不是一种安全的做事方式......我明白了......但是如果我只是想在页面之间传递ls变量,那么我对它们的回应就是这样的在我的应用程序..这些甚至都无法通过互联网访问...我真的不明白为什么ls项目无法在应用程序中全局访问,就像在iOS和其他网络中一样。如果有人有更好的解决方案,我很乐意听到它。

答案 3 :(得分:1)

在mainActivity中进行此设置(扩展Droidgap。)

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

我们正在使我们的应用程序不存储缓存。