web-dev-qa-db-ja.com

iOSで開いたときにネイティブWebアプリが自分自身をリロードしないようにする

IOSでHTML + JSを使用して「ネイティブWebアプリ」を構築しようとしています。ご存知かもしれませんが、このようなアプリケーションをホーム画面に追加すると、通常のネイティブアプリとほぼ同じように見えます。

ただし、そのようなアプリを終了して再度開くと、ページ全体が再度リロードされます。これは、マルチタスクバーを介して別のアプリケーションからそのようなアプリケーションに切り替えるときにも発生します。

これは予想される動作ですか、それともデバイスがこれを実行しないようにする方法はありますか?

例として、ここからjqTouch-Demosをホーム画面に追加してテストできます: http://jqtouch.com/preview/demos/main/

30
cguedel

アプリの状態をlocalStorageに保存できます。再起動時に、状態が実行されているかどうかを確認してから、アプリを最後の状態に復元します。

10
ghenne

ここでも同じ問題があります。とにかく、車輪の再発明をしたくない場合は、PhoneGap(http://www.phonegap.com/)のようなツールを使用できます。多数のネイティブ機能へのアクセスが組み込まれたネイティブWebアプリケーションラッパー。また、アプリケーションをローカルに(高速で安全に)保存し、もちろん課金することもできます;)BSDまたはMITライセンスの下にあります。

2
Giorgio Luparia

更新:この回答は反対票を受け取っているので、この説明を追加しました。

問題は実際のリロードではないかもしれませんが、Mobile Safariは、Webアプリをブラウザーで開いたときと、ホーム画面にWebアプリとして「インストール」したときとではユーザーのキャッシュとCookieを異なる方法で処理します。ここで提案されているlocalStorageを使用するソリューションは機能しますが、クライアント側のロジックでは多くの作業が必要であり、サーバーがユーザーのセッション状態の永続化を既に担当している場合は回避できます。 30秒の解決策は、セッションCookieを明示的に設定して有効期間を長くすることです。

これにより、デバイスを再起動しても状態を維持できるため、ホーム画面から起動したときにWebアプリの再読み込みが技術的に停止することはありませんが、ユーザーがいなくても簡単に状態を復元できます。彼女はリロードに気づきました-多くの場合、これが本当の問題だと思います。


この戦略とコード例のより詳細な説明については、これらの質問とそこでの私の回答をご覧ください。

1
Wilbo Baggins

Cache-manifestを使用して、ファイルがロードされないようにすることを検討することをお勧めします。

マットマイトはここに良い記事を持っています:

http://matt.might.net/articles/how-to-native-iphone-ipad-apps-in-javascript/

基本的に、htmlタグをこれに変更します

<html manifest="cache.manifest">

そして、どのファイルをデバイスキャッシュに保持し、どのファイルをネットワークから動的に再ロードするかを指定するcache.manifestファイルをサーバーに書き込みます。

CACHE MANIFEST
local1.file
local2.file

NETWORK:
network1.php
network2.cgi

また、WebサーバーがMIMEタイプtext/manifestの.manifestファイルを提供していることを確認する必要があります。そうしないとこれは機能しません。 Apacheを使用している場合は、.htaccessファイルに次のように入力します。

AddType text/cache-manifest .manifest
0
xiatica