18

我的问题本质上是对这个问题的跟进或澄清。

我有一个使用 Javascript 和Adob​​e 的 Phonegap Build 服务构建的 Android 应用程序,并且我正在使用“本地存储”在设备上存储数据。

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

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

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

至关重要的是,如果用户清除浏览器中的缓存,这会影响基于 Phonegap 安装的应用程序吗?

4

4 回答 4

19

由于 Phonegap 使用 Webiview 来呈现您的应用程序:WebView 和 Phonegap

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

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

阅读更多关于此的信息。看看 WebView 缓存:Cookie 和窗口管理

于 2013-03-03T10:19:32.910 回答
2

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

window.localStorage.removeItem("key");

或者

window.localStorage.clear();

或应用程序卸载

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

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

于 2013-03-03T10:20:07.227 回答
2

是的,它是独立的,但有时您需要将某种变量传递给 In App Browser。它使编码更容易将 ls 项目从当前的 web 视图传递到另一个,如 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% :)...如果您需要更多帮助,请告诉我

***更新*****

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

于 2013-11-06T15:35:24.603 回答
1

通过在您的 mainActivity 中进行此设置(扩展 Droidgap。)

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

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

于 2013-08-02T11:23:05.400 回答