WebViewに限らず、Androidのブラウザでも同じ振る舞いなのですが、
WebViewを用いて、PageAをひらきます。そこからフォームをサブミット
して(POSTで)PageBをひらきます。
BACKボタンをハンドルして、WebView.goBack()を読んでやります。
PageAはキャッシュをしないようにメタタグおよびヘッダをつけて
あるので、WebViewはWebサーバに再度PageAを要求に来ます。
WebサーバはPageAを返すのですが、HTMLの中でほんの一部分だけ
内容が変化したPageA’を返します。ステータスコードは200 OKです。
Content-Lengthは変わりません。当然キャッシュは禁止です。
日付は更新され、ETagはつけていません。
当然、WebサーバはPageA'を返したのでブラウザの画面にはPageA'が
表示されているべきなのですが、なぜか前回表示したPageAが表示
されています。
サーバにはちゃんとリクエストがきて、レスポンスを返したのにも
かかわらずです。その間、WebViewではWebViewClientのonPageStarted()
が呼ばれ、onPageFinished()が呼ばれているので、確かにサーバから
PageA'のHTMLを受信しているように思います。
WebView.reload()の場合は、ちゃんと新しいコンテンツに表示が
更新されます。
同じサーバで、PCのブラウザ、iPhoneのUIWebViewでアクセスする
場合には、「戻る」でリクエストが着て、返したレスポンスが正しく
表示されるのですが。
Androidのブラウザは、ページの内容がほとんど同じだと、全部同じ
とみなして再解釈しないとかあるんでしょうか?
ニッチな質問ですみません。どなたか情報をお持ちでしたらよろしく
お願いします。
こちらでも現象を確認しました。
例えばなのですが、今回、このフォームが、住所や氏名を入力するフォームで
あったとします。
フォームに住所や氏名を入力して送信後、何かの事情でgoBackで戻った場合、
戻った先は、入力済みの内容であって欲しいと僕は思います(全部真っ白になっ
ていたら、逆に困ります)。
なので、これはこれで正しい動作なのではないかと考えているのですが、この
あたり、他の人の意見もお聞かせ願えればと思います。
ちなみに、loadUrlで前のURLを指定すると再読み込みが正常に行われます。
なので、自前で履歴機能を実装して、バックボタンが押されると、一つ前の
URLをloadUrlで読み込むというのはいかがでしょうか。
> <meta http-equiv='Content-Type' content='text/html; http-equiv='Pragma'
> content='no-cache'>
> <meta http-equiv='CACHE-CONTROL' content='NO-CACHE'>
> <meta http-equiv='Expires' content='0'>
> </head><body>
> Test
> <?php
>
> $r = rand();
> echo $r;
>
> ?>
> <form action="dummy.html" method="POST">
> <input type="text" name="foo" value="<?php echo $r ?>" />
> <input type="submit" name="OK" />
> </form>
> <a href="dummy.html" >link</a>
> </body>
> </html>
>
> 2011年8月17日10:10 Arito Asai <asai...@gmail.com
> <mailto:asai...@gmail.com>>:
>
> 浅井です。
>
> すみません、その後の調査の結果、下記の記述は不正確で、
> WebViewは正しくPageA'を読み込んでいるのですが、PageA'
> の中のフォームデータ(INPUTタグのValue要素)の値がサーバ
> 側から降らせた新しい値ではなく、前回POSTした古い値が自動
> 的にセットされるという問題でした。
>
> > HTMLの中でほんの一部分だけ内容が変化した
>
> と書いた、一部分とはフォームデータのデフォルト値のことです。
>
> それはそれで未解決です。
>
> 2011年8月16日23:49 asaiarito <asai...@gmail.com
> <mailto:asai...@gmail.com>>:
> --
> このメールは Google グループのグループ「Android-SDK-Japan」の登録者に送
> られています。
> このグループに投稿するには、android-...@googlegroups.com にメール
> を送信してください。
> このグループから退会するには、android-sdk-
> japan+un...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/android-sdk-japan?hl=ja
> からこのグループにアクセスしてください。
--
Keiji,
ml_an...@c-lis.co.jp