NC4.5でブラウザをリサイズすると、JavaScriptが動作しなくなります

[上に] [前に] [次に]
KATSU [E-Mail] 1999/03/17(水) 15:11:07
KATSUと言います。よろしくお願いいたします。(長文失礼いたします)

さっそくですが、ご助言ください。


後述のソースは、CGIで出力した動的なHTMLです。(主要部分のみ)
実際には、フレームセットを構成する、フレームのひとつのHTMLになります。

この画面では、JavaScriptを使用し、14:33:48まで、制限時間60分として
残り時間を表示するようにしています。(この辺の数値を動的に埋め込んでいます)

そこで問題なのですが.......

NC4.5でこの画面を表示します。
そしてウィンドウサイズを変更すると、画面が再描画されます。( <TABLE>の再配置のため? )
これだけだと別段問題はありません。
しかし、リサイズを二回連続で行なう(一回目の再描画で画面がクリアされた瞬間にすかさず
二度目のリサイズ)と、カウントダウンをしていたテキストボックスが空になってしまいます。
JavaScriptが停止してしまっているようです。

と言いますのは、実は、後述のソースでは省略させていただいていますが、画面上にボタンを
配置し、クリックすると呼ばれるいくつかのJavaScriptをいくつか記述しているの
ですが、これらのScriptも、すべて反応しなくなってしまうのです。

特に、サブミットボタンから onSubmitで呼び出しているScriptは、送信するデータを
加工する処理であるため、これが無視されると、こちらが期待しないデータがPOSTされて
しまい、大変困っています。


このようなケースでJavaScriptが停止してしまわないような注意点、または停止して
しまった場合の対処方法(再読み込みではなく)がありましたら、お教えください。


よろしくお願いいたします。


−−−−−−以下HTMLです−−−−−−−

<HTML>
<HEAD>
<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=x-sjis">
<Script language="JavaScript">

var id = 0;
var limit_time = 60;
var first_flg = 0;
var i_lim_hour = 0;
var i_lim_min = 0;
var i_lim_sec = 0;
timeout_flg = 0;

function LimitTimeSet(){
  var s_num_base ="0123456789";
  var s_time_str="14_33_48";
  limit_hour = Math.floor((limit_time / 60));
  limit_min = limit_time % 60;
  i_lim_sec  = 0 + (s_num_base.indexOf(s_time_str.substring(6,7))*10);
  i_lim_sec  = i_lim_sec + s_num_base.indexOf(s_time_str.substring(7,8));
  i_lim_min  = limit_min + (s_num_base.indexOf(s_time_str.substring(3,4))*10);
  i_lim_min  = i_lim_min + s_num_base.indexOf(s_time_str.substring(4,5));
  if (i_lim_min >= 60) {
    i_lim_min = i_lim_min - 60;
    limit_hour = limit_hour + 1;
  }
  i_lim_hour = limit_hour + (s_num_base.indexOf(s_time_str.substring(0,1))*10);
  i_lim_hour = i_lim_hour + s_num_base.indexOf(s_time_str.substring(1,2));
  if (i_lim_hour >= 24) {
    i_lim_hour = i_lim_hour - 24;
  }
}
function Timer(){
  var d_now_date,i_now_hour,i_now_min,i_now_min;
  var i_cnt_hour,i_cnt_min,i_cnt_sec;
  var h1 = "";
  var h2 = "";
  var m1 = "";
  var m2 = "";
  var s1 = "";
  var s2 = "";
  if (first_flg == 0) {
    LimitTimeSet();
    first_flg = 1;
  }
  d_now_date = new Date();
  i_now_hour = d_now_date.getHours();
  i_now_min  = d_now_date.getMinutes();
  i_now_sec  = d_now_date.getSeconds();
  if ((i_lim_sec - i_now_sec) < 0){
    i_cnt_sec = 60 + (i_lim_sec - i_now_sec);
    i_now_min = i_now_min + 1;
  } else {
    i_cnt_sec = i_lim_sec - i_now_sec;
  }
  if (i_cnt_sec < 0) {
    i_cnt_sec = 0;
  }
  if ((i_lim_min - i_now_min) < 0){
    i_cnt_min = 60 + (i_lim_min - i_now_min);
    i_now_hour = i_now_hour + 1;
  } else {
    i_cnt_min = i_lim_min - i_now_min;
  }
  if (i_cnt_min < 0) {
    i_cnt_min = 0;
  }
  if ((i_lim_hour - i_now_hour) < 0){
    i_cnt_hour = 24 + (i_lim_hour - i_now_hour);
  } else {
    i_cnt_hour = i_lim_hour - i_now_hour;
  }
  if (i_cnt_hour < 0) {
    i_cnt_hour = 0;
  }
  h1 = Math.floor(i_cnt_hour/10);
  h2 = i_cnt_hour % 10;
  m1 = Math.floor(i_cnt_min/10);
  m2 = i_cnt_min % 10;
  s1 = Math.floor(i_cnt_sec/10);
  s2 = i_cnt_sec % 10;
  document.fm.tm.value = "" + h1 + h2 + ":" + m1 + m2 + ":" + s1 + s2;
  if (i_cnt_hour == 0 && i_cnt_min == 0 && i_cnt_sec == 0) {
    clearTimeout(id);
    timeout_flg = 1;
    gonext();
    return;
  } else {
    id = setTimeout("Timer()" , 900 );
  }
}
function stop() {
  clearTimeout(id);
}
function StartTimer(){
  Timer();
}

</Script>
</HEAD>
<BODY onLoad="StartTimer();" onUnload="stop();" BGCOLOR="#FFFFC0">
<CENTER>
<FORM NAME="fm" onSubmit="return false;">
<TABLE>
<TR>
<TD>
残り時間:
</TD>
<TD>
</B></FONT><INPUT TYPE="text" SIZE=10 NAME="tm" VALUE="">
</TD>
</TABLE>
</FORM>
</CENTER>
</BODY>
</HTML>

martin [E-Mail] [HomePage] 1999/03/18(木) 02:25:49
 リサイズすると,JavaScriptが無効になったり,レイアウトが
崩れると言うのは,NC4xのバグです。よって,たいていこの手の
問題は,onresize=yourResizeFunction で制御するんですが,
それは再読み込みをさせるということです。よってKATSUさん
の期待しておられる方法はないような気がします。少なくともぼくは
リロードを指定しないようなうまい方法は知りません。
 NC5に期待しましょう。

KATSU [E-Mail] 1999/03/18(木) 09:22:45
martin さん 回答ありがとうございます。

> リサイズすると,JavaScriptが無効になったり,レイアウトが
>崩れると言うのは,NC4xのバグです。よって,たいていこの手の

そうですか。やはりバグなのですね。
IE3/IE4/NN3 ではこのような現象は起こりませんでした。

>問題は,onresize=yourResizeFunction で制御するんですが,
>それは再読み込みをさせるということです。よってKATSUさん
>の期待しておられる方法はないような気がします。少なくともぼくは
>リロードを指定しないようなうまい方法は知りません。

これは、<BASE>タグに、onresize="location.href = location.href;"
とかして、リサイズ時に一度再読み込みが起こるようにするということ
でしょうか?

この方法が有効なら、使えそうな気がします。
つまり、JavaScriptが無効になってしまった場合、見ている
人に手動で再読み込みをかけてもらう訳にはいかないので、再読み込み
以外の方法が知りたいと思っていました。
サイズ変更で自動的に再読み込みされるのなら、それはそれで良いと
思います。

ただ、普通にリサイズする時にも、必ず再読み込みが発生するというのは
ちょっと気持ちよくないとは思いますが.....

一度試してみます。
ありがとうございます。大変助かります。m(_ _)m



matusita [E-Mail] 1999/03/18(木) 14:34:28

当方、NC4.51を導入しましたら、少し安定したように思います。
一度おためし下さい。ただし、直接ダウンするしか入手の方法は無い
ようです?。

KATSU [E-Mail] 1999/03/18(木) 15:26:08
matusita さん。ご回答ありがとうございます。

>当方、NC4.51を導入しましたら、少し安定したように思います。
>一度おためし下さい。ただし、直接ダウンするしか入手の方法は無い
>ようです?。

なるほど。
たしかに当方で確認しているのは、4.5でのケースです。

ただ、対象が不特定多数(社内ではあるけど)のシステムのため、バージョン
アップしてください とはなかなか言えないのがつらいところです。

しかし情報としては、とてもありがたいです。
さっそく確認してみたいと思います。

どうもありがとうございました。


kento [E-Mail] [HomePage] 1999/03/19(金) 19:40:48
[[解決]]
  ちょっと疲れたよ!

[上に] [前に] [次に]