重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

javascriptに関する質問です。(覚えたての初心者です)
ただいまホームページで、1分毎にiframe内のページを自動リロードさせているのですが、
これを、アクセスしたユーザーのローカルPC時間の0秒に合わせて自動リロード、に変更
したいと考えています。

具体的に申しますと、
自分で育てている野菜を紹介するホームページなのですが、今まではユーザーが訪問した
瞬間を「0秒目」と考えて、そこから60秒経ったら、大根→はくさい→野沢菜→きゅうり…と
iframe内のページを変更しておりました。

これを、「ユーザーのPC時計の0秒目に合わせてページを更新」させたいのです。
(理由は、「毎分でいろんな野菜をご紹介中!」とキャッチフレーズを付けているので
中途半端な時間よりも、ユーザーの時計に合わせたタイミングで写真を切り替えたいと
考えている為です)

現在、下記のようなjavascriptで表現しています。

<HTML>
<HEAD>
<TITLE>大根のご紹介!</TITLE>
<SCRIPT TYPE="text/javascript">
<!--
var jikan = "60000";
function ReloadAddr(){
window.location.reload();
}
setTimeout(ReloadAddr, jikan);
//-->
</SCRIPT>
</HEAD>
<BODY>
//大根の写真や紹介文など
</BODY>
</HTML>

これを、どのように変更すれば解決出来ますでしょうか?
インターネットで様々なサンプル集を見て回ったのですが、上記のような
「一定時間でリロード」という方法は載っているのですが、
「ユーザーのローカル時計が0秒になったらリロード」というサンプルを
見つける事が出来ませんでした…

もし宜しければ、サンプルが載っているサイト様をご紹介頂くだけでも構いません。
それでは何卒宜しくお願い致します。

A 回答 (2件)

毎分0秒に合わせる為に1秒毎にチェックを入れると


重くなりますので、開いた際に現在秒を取って
それが60秒になる際にリロードをする方がいいのでは
ないでしょうか。

function ReloadAddr(){
window.location.reload();
}
now = new Date();
sec = now.getSeconds();
var inter = 60 - sec;

setTimeout(ReloadAddr, inter*1000);

未テスト&#1さんの処理を流用

また、iframe内ページの表示を制御する場合は
親からiframe内ページに対して制御を行う方がいいように思います。

親から制御する場合は、同様に最初に現在秒を取って
60秒になる時にiframe内をリロードし、あとは60秒おきに
リロードすればほぼ0秒にリロードさせる事は可能です。

function ReloadiAddr(){
document.iframe名.location.reload();
}
now = new Date();
sec = now.getSeconds();
var inter = 60 - sec;
setTimeout( function(){
ReloadiAddr();
setInterval(ReloadiAddr, 60000);
}, inter*1000);

こんな感じでしょうか。
iframeの呼び出し方どうだったろうか・・・
document.iframe名.****でいけたはず

同じく未テスト

まぁ、イメージではこんな感じです。

この回答への補足

すみません、補足が該当するコメントでしたのにお礼の欄に掲載してしまいました。
宜しくお願い致します。

補足日時:2010/02/15 20:06
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
当初の希望通り、0秒目のリロードが出来るようになりました!
ただ、教えて頂いた「親ページからiframeをリロードする」点は
書いて頂いたソースのコピペでは上手くいきませんでした…

iframeのタグは
<iframe id="yasai" name="yasai" src="yasai.php"></frame>
としているので、書いて頂いた
>document.iframe名.location.reload();
の部分を、
document.yasai.location.reload();
もしくは、
document."yasai".location.reload();
かなぁと思い挑戦してみるも、どちらも自動リロードは出来ませんでした。

お礼日時:2010/02/15 16:55

単に思いつきで書きますが。



・時間間隔を1分→1秒

・実動関数内で秒を取得(getSeconds())
・ifで秒が0かチェックし、0ならばwindow.location.reload();を呼び出す。

スクリプトが頻繁に動く事になりますが、秒を確認するのであれば、毎秒チェックする形にしないと、取れないかと。

現在の内容ではチェックできる最小の時間単位は分なので。




var jikan = "1000";
var ldate;
var sec;
function ReloadAddr(){
 ldate= new Date(); ←現日時の取得
 sec = ldate.getSeconds();  ←秒の取得
 if (sec == 0){  ←0秒チェック
  window.location.reload();
 }
}
setTimeout(ReloadAddr, jikan);

※文法チェック、テスト等は全くしてません。
    • good
    • 0
この回答へのお礼

お礼欄をお借りします。
このたび、全て解決の運びとなりましたのでご報告いたします。

まず、0秒目のリロードは解決し、その後、No2さんのお教え頂いた
「親ページでのリロード」は、getElementByIdを利用する事で
実行出来ました。

このたびはありがとうございました。

お礼日時:2010/02/16 17:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!