18

私の質問は、基本的にこの質問のフォローアップまたは説明です。

JavascriptとAdobeのPhonegapBuildサービスを使用してAndroidアプリをビルドし、「ローカルストレージ」を使用してデバイスにデータを保存しています。

他の質問から、ローカルストレージに保存されたデータは本質的に「永続的」であり、ユーザーがアプリのキャッシュを手動でクリアしたり、アプリを削除したりしない限り、デバイスに無期限にとどまることがわかりました。私が喜んで一緒に暮らす他の異常な状況)。

しかし、受け入れられた回答の一部は、電話のブラウザーについて話すこととPhonegapアプリについて話すことの間の境界線を曖昧にし始めたという点で、私を混乱させました。

Phonegapを使用するAndroid上のアプリが、電話の組み込みブラウザーと同じキャッシュを使用するかどうかは、私にはわかりません。Phonegapは基本的に既存のブラウザー機能の拡張ですか、それとも独自のスタンドアロンおよび自己完結型ブラウザーですか?

重要なのは、ユーザーがブラウザーのキャッシュをクリアした場合、それはPhonegapに基づいてインストールされたアプリに影響を与えるでしょうか?

4

4 に答える 4

19

Phonegap は Webiview を使用してアプリをレンダリングするため、WebView と Phonegapです。

セキュリティ上の理由から、使用する各アプリにはWebView独自のキャッシュと履歴があります。「ユーザーもOSも、サードパーティ製アプリケーションがそのようなデータにアクセスすることを望んでいません」. つまり、アプリは独自の履歴とデータをキャッシュ フォルダーに保持し、次のいずれかの場合に削除されます。

  • ユーザーが手動で削除しました。
  • ユーザーがアプリの設定画面を使用して削除しました。
  • アプリをアンインストールしました。

これについてもっと読むには。WebViewキャッシュを見てください:Cookieとウィンドウ管理

于 2013-03-03T10:19:32.910 に答える
2

はい、それは別ですが、何らかの変数を In App Browser に渡す必要がある場合があります。iOS のように、現在の Web ビューから別の Web ビューに ls アイテムを渡すと、コーディングがはるかに簡単になります。

これが私がPhoneGapでやったことです

InAppBrowser executeScript() を使用して、現在の webviews localStorage のコピーを別の Web ビューに渡します。

//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 変数を渡したいだけの場合はどうなるでしょうか。私のアプリでは..それらはインターネットからもアクセスできません... iOSやその他のWebのように、アプリでlsアイテムにグローバルにアクセスできない理由が正直にわかりません。誰かがより良い解決策を持っているなら、私はそれについて聞きたいです.

于 2013-11-06T15:35:24.603 に答える
2

いいえ、アプリ内ブラウザ内で作成されたキャッシュは、次の方法でのみ削除できます。

window.localStorage.removeItem("key");

また

window.localStorage.clear();

またはアプリのアンインストール

または、アプリケーション マネージャーでの手動操作 (データ/キャッシュの削除)。

しかし、最善の答えは、自分で実験を行い、何が起こるかを確認することです.

于 2013-03-03T10:20:07.227 に答える