- ベストアンサー
重たいwebページ表示前にメッセージを表示したい
皆様、いつもお世話になっております。 CGIでデータベースを使用して作成した重たいwebページを表示する前に 「しばらくお待ちください」のメッセージを同じページに表示したいのですがどうすればいいのでしょうか? そんな TAG はありませんでしょうか? どうぞご教授お願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
MovableTypeなどのインストール画面はプログレス表示になっていて、実行が終わったところまでを順次表示していきますよね? いったん「しばらくお待ちください」までをブラウザに返しておいて、bodyタグのonLoadのJavaScriptで、その表示をCSSでdispkay:noneに替えてしまうというのはどうでしょう。 「しばらくお待ちください」までを返した状態でブラウザがキチンとレンダリングできるように、うまく(そこまでの)HTMLを組み立てないといけないとか、ブラウザがキャッシュしないように最後にasciiの空白をたくさんくっつけて送るとか・・はあるでしょうけど。 #未検証なのであしからず(汗
その他の回答 (2)
- shimix
- ベストアンサー率54% (865/1590)
#言語は何であっても同じです。 サーバからブラウザへ送られた内容は順次表示されます。ただしあとの内容が返ってこないとレンダリング出来ないような場合には止まります(テーブルなど)。なので、順次ブラウザへ送り返してやれば返したものから表示してくれます。 で、一度表示したもの(=しばらくお待ちください)を消すためにはJavaSctiptなどを使うしかないと思います。 (蛇足) 私もWin32アプリではDelphiを使ってます。webアプリも少し作ったのですが、普通のサーバ(Unix)でも動かしたくてphpに移行しました。
お礼
shimix様 大変、参考になりました。ありがとうございました。 理解するのに時間がかかったり、「教えて!goo」の使い方をわかってなかったりで、お礼がおそくなりました。感謝します。
- shimix
- ベストアンサー率54% (865/1590)
ANo.1です。ちょっと試してみました。phpはシステムが標準でバッファリングするのでその関係の関数が余分になっちゃってます。 <html> <head><title>test</title> <script language="JavaScript" type="text/javascript"><!-- function hide() { document.getElementById('preset').style.display = "none"; } //--></script> </head> <body onLoad=hide()> <?php ob_end_flush(); ob_start('mb_output_handler'); $i = 0; while ($i < 99) { print ' '; ob_flush(); $i++; } print '<div id="preset">お待ちください</div>' . "\n"; ob_flush(); flush(); sleep(5); ?> <div>結果表示です</div> </body> </html>
お礼
ANo.1様 ありがとうございます。 お礼が遅れまして申し訳ありません(パスワード忘れです)失礼いたしました。 PHP は全くわからないのですが、インタプリンタですか?JavaScript で制御できるのでしようか?本当に情けないのですが理解できませんでした。どうぞお許しください。 私は開発ツールにDelphiを使用しています。ご存知でしたらよろしくお願いいたします。
お礼
shimix さんありがとございます。 お名前を間違えました shimix さんですね。失礼いたしました。