4

Mobile Safariのキャッシュマニフェストファイルを使用して、iPod Touch(バージョン3.1.3)でオフラインモードで実行される複数ページのデータ入力アプリケーションを保存しています。アプリケーションは、persistence.jsORMを介してクライアント側データベースに書き込みます。これはすべて正常に機能します。

しかし、Safariがページがキャッシュされていることを忘れているように見える、再現が非常に難しい問題に遭遇することがあります。これが発生すると、「ページを開くことができません」というアラートが表示されます。これは、Wi-FiをオフにしてキャッシュされていないWebサイトにアクセスしようとしたときに表示されるアラートと同じです。これを修正するために私が見つけた唯一の方法は、ワイヤレス信号に再接続し、オンライン中にサイトにアクセスすることです。これにより、キャッシュがまっすぐに設定されているようです。これは、オフィスにいるときは簡単ですが、現場で行うのはそれほど簡単ではありません。

キャッシュされたリソースの外部にあるものを参照しようとはしていません。アプリケーションが切断されている間にサイト全体を実行することでキャッシュされていることを確認しました。キャッシュの有効性を台無しにするOSのバグがあるように感じます。私は必ずしも問題の解決策を探しているわけではありませんが(しかしそれは素晴らしいことです)、他の人がこの問題に遭遇したことを確認するだけです。

4

1 に答える 1

2

キャッシュ マニフェストと多くのトラブルシューティングを使用して、アプリケーション全体を確実にキャッシュできます。これは、個別のファイル リソースがいくつかあるだけの単一ページ アプリであることに注意してください。

さらなる機能強化として、DOM を以下に基づいて変更しようとしています。

window.applicationCache ステータス

更新についてユーザーに通知します。

ここをタップしてアップデートを適用します

それが可能であれば、キャッシュを交換できます

window.applicationCache.swapCache();

これにより、更新されたキャッシュをスワップしてからページを再起動して、合理化された更新メカニズムを提供できます。

Apple Store のアプリよりも合理化されている可能性があります。

まさにこの理由で、web アプリケーションを妨害するために、applicationCache API が Apple によって妨害されたのではないかと思います。そうは言っても、モバイル デバイスでの "html5" API のサポート レベルは、Apple の Safari で最も堅牢なものの 1 つだと思います。

以下は、これまでに気づいたいくつかの問題です。順不同です。これはバグの包括的なリストではないことに注意してください。

「updateready」イベントが発生しません。この警告行は決して実行されません:

window.applicationCache.addEventListener('updateready', function(e) {
    alert('updateready event status=' + window.applicationCache.status );
}, false);

更新を手動で確認することはできません。次のコードでは例外が発生します

    try{
        window.applicationCache.update();
    }catch (err){
        alert('exception:\n' + err);
    }

キャッシュの状態を操作し始めるとすぐに、キャッシュが機能しなくなったようです。バグは非常にとらえどころのないものです。特に、このコードはすべて他のブラウザー (chrome) で問題なく実行されるため、1 つの問題を突き止めて特定するには、多くの時間がかかる可能性があります。

アプリをホーム画面にピン留めすると、iCloud はリソースを「バックアップ」し、ホーム画面からアプリを初めて実行した後にそれらを復元するのではないかと思います。この問題を回避するには、ファイルの名前を変更する必要がある場合があります。私は、Apple が廃止されたコンポーネントの個別のバックアップを作成していることを証明しました。

アプリサーバーから完全に削除する

固定された Web アプリをホーム画面から削除する

すべてのキャッシュをクリアする

SafariでアプリのURLを開く

最新バージョンであることを確認します

ホームにピン留めする

固定されたアプリが最新バージョンであることを確認します

閉じる

もう一度実行します-サーバー上ではなく、古いものに戻ります。

最後に、電話が機内モードのときにピン留めされたアプリを実行すると、iCloud は古いファイルを復元できなくなります。これは、それが無線から来ていることを証明しています。

于 2012-03-27T18:16:59.447 に答える