• ベストアンサー

IE でうまく動かない

次の速度測定もどきは、NN7 ではうまく動いたのですが、IE7 では最終的に i=0 になってしまいます。どこに問題があるのでしょうか。 now = new Date().toString(); img = new Image(); img.src = "http://www.geocities.jp/ji1mub/image.png?" + escape(now); var i = 0; timer = setInterval ("i++", 10); window.onload = function() { clearInterval(timer); kb = 552; sec = i/100; kbps = Math.round(kb/sec); alert("接続速度は " + kbps + " Kbps です。") } よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

window.onload が起こるタイミングとして、 読み込むimg が実際には描画されていないので、画像が読み込まれる前にonload イベントが起こっているのではないかと思います(単なる推測なので間違っていたらすみません) なので、実際に<body> の中で表示される様にしてみてはどうでしょう。 setInterval は、javascript1.2 以降使えたと思います。 IE6で使えますので、IE7でも使えると思いますが #1 でも言われているように Date.getTime() を使う方が簡明だと思います。

KanjiTalk
質問者

補足

たしかonLoadまで要素が取得できなかったと思うのですが、 そうするとonLoad前にキャッシュの読み出し防止用の アドレスの疑問符以降を追加できないのですが...

その他の回答 (2)

回答No.3

> やはりsetIntervalは不安(というか > 信用できない)ので、 そのとおり、信用出来ません。 setTimeOut、setIntervalは、 指定された時間以上の間隔を空けて、可能な限り早いタイミングで関数を呼び出す です。 (CPU負荷を抑えるためにこういう仕様になっているらしいです。) IEにはHTML+TIME(マルチメディアタイマー)がありますので、これは時間の方を優先して呼び出されます。 (そのかわり下手すると変数の内容が破壊されます) > アドレスの疑問符以降を追加できないのですが... document.write('<img src="image.png?"+escape(now)+'" width="0" height="0">'); </body>の直前にかけば良いと思います。 > IE7 では最終的に i=0 になってしまいます。 この理由はわかりません。。。

KanjiTalk
質問者

お礼

次のようにしたところ、うまく動きました。ありがとうございます。 <head> <script type="text/javascript"><!-- now = new Date().toString(); st = new Date().getTime(); window.onload = function() { tm = new Date().getTime() - st; kb = 539; sec = tm / 1000; kbps = Math.round(kb/sec); url = "http://www.pref.ibaraki.jp/bukyoku/nourin/suishi/musen/noaa/movie/noaa.html"; location.href = url + "?" + kbps; } //--</script> </head> <body> <script type="text/javascript"> document.write("<img src="test.png?" + escape(now) + "' width='0' height='0'>"); </script> </body>

noname#39970
noname#39970
回答No.1

手元にある資料だとIE(5~6。7は不明)ではsetIntervalは非対応になってる やるなら getTime() を用いる方が良さそう。

KanjiTalk
質問者

お礼

ありがとうございます。やはりsetIntervalは不安(というか 信用できない)ので、getTime()を使うようにさせていただきます。

関連するQ&A