ソフトウェア >> NextScreen >> サポート >> FAQ >> FAQ詳細

?NextScreenサポート

FAQ(よくあるお問い合せ)

スクリーンにWebブラウザー表示でCGIで生成されるホームページを表示させていますが、シーケンスの2巡目以降は表示が更新されません。

Webブラウザーのキャッシュ機能による影響です。

NextScreenのWebブラウザー表示は、.NET FrameworkのWebブラウザーコンポーネントを利用しています。これは、表示に関してはInternet Explorerの機能を利用するのですが、ブラウザーを手動で利用するときとはキャッシュについての動作が若干異なります。Internet Explorerを既定値(デフォルト)で使用している場合、NextScreenのビューワ(エディタのプレビュー機能を含む)は、最初に表示するときはキャッシュされない状態で表示しますが、次に同じURLが指定されるとキャッシュ内容を表示しようとします。そのため、CGIなどで動的に生成されるページを正しく表示できないことがあります。

これを避けるためにはいくつかの方法があります。(それぞれに利点と欠点があります。)

  • Internet Explorerの設定を変更する
  • CGIなどを変更して、キャッシュをコントールする
  • JavaScriptによるリダイレクトを使う

A.Internet Explorereの設定を変更する
この方法は最も簡単に行うことが出来ます。ただし、エディタとビューワ毎に設定が必要であり、また表示する全てのホームページをキャッシュしなくなるので、表示速度が低下する場合があります。

設定の変更は次のように行います。
  • Internet Explorerのアイコンを右クリックして表示されるコンテキストメニューから「プロパティ」を選びます。(または、コントロールパネルから「インターネットオプション」を選びます。)
  • 「インターネットのプロパティ」画面が表示されます。(開いた画面が「全般」タブになっていることを確認してください。)
  • 「閲覧の履歴」の「設定」ボタンをクリックします。
  • 「インターネット一時ファイルと履歴の設定」画面が表示されます。
  • 「インターネット一時ファイル」の欄内、「保存しているページの新しいバージョンの確認」で、「Webサイトを表示するたびに確認する」を選び、「OK」ボタンをクリックします。
  • 「インターネットのプロパティ」画面は「OK」ボタンをクリックして閉じます。

以上で完了です。 Internet Explorereの設定がNextScreenにも反映されます。



B.CGIなどを変更して、キャッシュをコントールする
本来、動的なホームページはページを生成するプログラム内でキャッシュをコントロールする必要があります。この方法はページ毎にキャッシュするしないを設定できますが、プログラムに手を加える必要があるため、状況によってはこの方法を採用できないこともあります。
プログラムでキャッシュさせないようにするためには、ブラウザーにコンテンツを送る前にHTTPヘッダを送る必要があります。
次のようにプログラム内に記述することによってHTTPヘッダをブラウザに対して送ることができます。

Javaの場合

   response.setHeader( "Pragma", "no-cache" );
   response.setHeader( "Cache-Control", "no-cache" );
   response.setDateHeader( "Expires", 0 );
   
PHPの場合
				
   header( "Content-Type: text/html; charset=utf-8" );
   header( "Expires: Thu, 01 Dec 1994 16:00:00 GMT" );
   header( "Last-Modified: ". gmdate("D, d M Y H:i:s"). " GMT" );
   header( "Cache-Control: no-cache, must-revalidate" );
   header( "Cache-Control: post-check=0, pre-check=0", false );
   header( "Pragma: no-cache" );
   
※1行目の charset=utf-8 は使用する文字コードに合わせてください。

Perlの場合

   print "Content-type: text/html\n";
   print "Pragma: no-cache\n";
   print "Cache-Control: no-cache\n";
   print "Expires: Thu, 01 Dec 1994 16:00:00 GMT\n\n";
   
HTML内に記述する場合

 <head>
   <meta http-equiv="Pragma" content="no-cache">
   <meta http-equiv="Cache-Control" content="no-cache">
   <meta http-equiv="Expires" content="Thu, 01 Dec 1994 16:00:00 GMT">
 </head>
 


C.JavaScriptによるリダイレクトを使う
Internet Explorerの設定変更やプログラムの変更ができない場合は、別途最初に表示させるページを作成し、JavaScriptによるリダイレクトを行う方法があります。この方法は、ダミーとなるパラメータをJavaScriptで自動生成することになるため、CGI側で受け取るパラメータと重ならないように注意する必要があります。

【例】
表示させたいURL: http://localhost/test.cgi?id=12345
新しく作成するページ: http://localhost/redirect.html

「redirect.html内」には次のように記述します。
<html>
  <script language="JavaScript">
    var today = new Date();
    var tick = today.getTime();
    location.href = "http://localhost/test.cgi?id=12345&dummy=" + tick;
  </script>
</html>
NextScreenで、「http://localhost/redirect.html」を指定して表示させます。このhtmlが読み込まれるとすぐにJavaScriptが実行され、指定のURLのページが表示されます。

【解説】
new Date()で現在の日付時刻を取得し、getTime()メソッドでそれをミリ秒として取得します。
dummyという名前のダミーのパラメータの引数としてミリ秒を指定しています。
ミリ秒はアクセスする度に異なりますので、ブラウザーコンポーネントは別のURLと認識します。
※dummyというパラメータは対象のCGIで使用していないものを使ってください。

リダイレクトのURLにダミーのパラメータを使用する方法は、CGI内からリダイレクトするときにも利用できます。

※ここで紹介した方法により確実に表示が更新される保証はありません。また、提示したプログラムやスクリプトの動作について、福猫株式会社は一切の責任を負いません。