こんにちわ。
リロードボタンを押した場合の処理について教えて下さい。

<BODY>のなかでonload="関数"とするとページを読込んだ時や、リロードした時に関数が
実行されると思うのすが、読込んだ時(他のページから入って来た時)は何も処理はさせたくなくて、
リロードした時だけさせたい処理があるのですが、どのようにすれば分けられるでしょうか?

ご存知の方がいましたら回答お願いします。

A 回答 (3件)

あ,フレーム内部のリロードならOKですけど,フレーム全てが更新されると,この方法は駄目ですね。



素直に保存無しのCookie使ってセッション管理するのはどうでしょう?
    • good
    • 0
この回答へのお礼

そうですか。
すべての更新は駄目なのですね。

出来ればCookieは利用したくなかったのですが、他に方法が無いのであれば
どうしようもないので再度検討してみます。

何度もご回答頂き有難うございました。

お礼日時:2002/03/20 18:52

<script language=JavaScript>


<!--
b="0";
function framewrite(a){
++b;
a.open();
a.write(b);
a.write('<a href="javascript: parent.framewrite(document)">Click!!</a>');
a.close();
}
function initialize(){
framewrite(Ctrl.document);
framewrite(Main.document);
}
-->
</script>
<frameset cols="205,*" border=10 onLoad="javascript: initialize()">
<frame name="Ctrl">
<frame name="Main">
</frameset>

例えば,このソースだと "b" という変数 ~Main,Ctrlの各フレーム内から見ると, "parent.b" 変数~ を左右のフレームで共有しています。
これを左右のフレームでなく,リロード前,リロード後のドキュメントで共有することを考えてください。ページを一度読み込んだかどうかのフラグを共有することに応用できます。

一つのファイルしか使っていないため,例のソースが少々理解しずらいかも。

この回答への補足

こんにちわ。
 
MainとCtrlでbを共有出来ると言うことは理解出来ます。
でも、リロード前とリロード後で共有ということがわかりません。
他のページから入って来た場合でも、リロードした場合でも、
bの値は初期化はされるのではないのですか?

リロード前(他のページから入って来た時)もリロード後も
同じ手順の処理をするよう思えてしまいます・・・
頭が迷路に迷い込んでしまったみたいです。

理解力が乏しく何度も質問してしまい申し訳ありません。
再度ご回答頂けると幸いです。
どうぞよろしくお願い致します。

補足日時:2002/03/15 13:49
    • good
    • 0

IEでしか確認していませんが、



frameを使うと、window.parentオブジェクトを使うことでドキュメント間のデータのやりとりが行えました。

この回答への補足

onosukleさんありがとうございます。

でも、意味がわかりません。
window.parentオブジェクトをどのように使えば、
読込んだ時(他のページから入って来た時)とリロードの
区別を付けられるのでしょうか?

お手数ですが、再度ご回答頂けませんでしょうか。
よろしくお願いします。

補足日時:2002/03/14 16:54
    • good
    • 0

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qリロードについて

お世話になっております。
メタタグでリロードする時に、

<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Refresh" content="1">

と書けば1秒おきにリロードされるんですけど、そのページを開いた瞬間に一回だけリロードされるようにしたいです。

一回のみリロードされる方法をよろしくお願いいたします!

Aベストアンサー

一回だけ、というのは、
「開いたときにリロード」か
「一回しかリロードできない」か、分かりません。

前者の方がよく使うと思うので、そちらを解説します。

<script>location.reload()</script>

このタグを埋め込むだけでよいと思います。
ちなみに、カウンターを二重カウントさせる、などの目的ならカウンターの後、もしくは</body>の直前に入れるといいと思いますよ。

後者のほうは、deagleさんが解説してくださっています。

Q と window.onload

JavaScriptのonload処理についての質問です。

現在Java、JSP、JavaScript等でWebアプリケーションを作成しているのですが、
bodyタグ中のonloadに記載したファンクションが時々呼ばれないという問題が起きています。
(こんな感じで記述
 <body onload="hoge();hogehoge();">
 hogehoge()がたまに呼ばれないことがある・・・)

これを回避する方法として、「onload処理をwindow.onloadに記述すれば良い」
という話を聞きました。
(こんな感じで記述
 <script>
   window.onload = function(){ hoge();hogehoge(); }
 </script>


「bodyタグ中に記述するとたまに呼ばれないものが、window.onloadに記述すると確実に呼ばれる」
なんてことがあるのでしょうか?
「2つめのファンクションが呼ばれない」という現象がたまにしか発生しないので、
window.onloadに記述する方法で確実に呼ばれるようになったという保証がとれません。
知識として知っている方がいれば是非教えていただきたいです。
よろしくお願い致します。

※ブラウザはIEを使用
 バージョンは IE → 6.0
     JavaScript → 1.1 です。
 

JavaScriptのonload処理についての質問です。

現在Java、JSP、JavaScript等でWebアプリケーションを作成しているのですが、
bodyタグ中のonloadに記載したファンクションが時々呼ばれないという問題が起きています。
(こんな感じで記述
 <body onload="hoge();hogehoge();">
 hogehoge()がたまに呼ばれないことがある・・・)

これを回避する方法として、「onload処理をwindow.onloadに記述すれば良い」
という話を聞きました。
(こんな感じで記述
 <script>
   window.onload = function(...続きを読む

Aベストアンサー

><body onload="hoge();hogehoge();">
hoge()に処理を中断するような内容が書かれている可能性もあります。
そうなると、なにをやってもhogehoge()は実行されません。

また、タグにメソッドを書き込むのはHTMLとJavascriptの分離という
視点でもあまりスマートではありません。
意識してwindow.onloadを使った方がきれいなソースになります

Qperl チャット リロード

chatpad(http://chatpad.jp/)というサイトを利用してみて思ったのですが、リロードっていつしているのでしょうか?(ブラウザのステータスバーを見る限りは一定の間隔でしかリロードしていなくて、リロードしていない時でも発言は更新される)
perlの勉強をしていて、チャットを作ろうと思ったのですが、色々なサイトを調べてみても、「相手が発言したのかどうかを調べるためにはリロードするしかない。」みたいに書いてあったのですが、リロードなしでも相手の発言を取得して随時表示させていくことができるのでしょうか?(できるなら、そのようなプログラムを書きたいです)
javascriptとperlだけで実現するチャットの場合、どのようなアルゴリズムが一番スマートですか?詳しく教えてください。お願いします。

Aベストアンサー

そのチャットを試したわけじゃないけど紹介記事には「Ajaxを利用しており」って書いてありますね。
http://gigazine.net/index.php?/news/comments/20090715_chatpad/

単純に内部的に定期リロードしてるのか・・・うまく作れば他者の発言に合わせて非同期でロードもできるのかな。
http://www.google.com/search?q=chat+ajax+perl&lr=lang_ja

Q読み込み開始から読み込み終了まで処理中表示する方法

ページを読み込み開始してから読み込み終了までの間に「処理中」と画面に表示したいと思い、http://oshiete.goo.ne.jp/qa/2753468.htmlを参考に下記のソースを書かさせていただいました。

【ソース】
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<title>title</title>
<script type="text/javascript">
<!--
window.onload=function(){
document.getElementById("loading").style.display="none";
}
// -->
</script>
</head>
<body>
<div id="loading">ロード中</div>
<?php
// 本当はここでphpを用い、大量のデータベースアクセスを行っていて、処理に時間がかかっています。
flush();
sleep(2);
?>
本文です<br />
</body>
</html>

ただし、上記をブラウザで閲覧した所、最初に砂時計アイコンが表示され、その後しばらくして「本文です」と表示されましたが、「ロード中」という表示はされませんでした。

これをページ読み込み時に「ロード中」とブラウザ上に表示させ、しばらくたった後、「ロード中」を消した上で「本文です」と表示させたいと思ったのですが、どのように書けば良いか分からなかった為、アドバイスいただける方がいらっしゃいましたら、ご教示の程よろしくお願いします。

以上、宜しくお願いします。

ページを読み込み開始してから読み込み終了までの間に「処理中」と画面に表示したいと思い、http://oshiete.goo.ne.jp/qa/2753468.htmlを参考に下記のソースを書かさせていただいました。

【ソース】
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Conte...続きを読む

Aベストアンサー

きっちりやるならやはりajaxで処理する方がよいでしょう

viewdata.php
<script>
function createXMLHttpRequest(){
if( window.XMLHttpRequest ){
return new XMLHttpRequest();
}else if( window.ActiveXObject ){
try{
return new ActiveXObject( "Msxml2.XMLHTTP" );
}catch(e){
return new ActiveXObject( "Microsoft.XMLHTTP" );
}
}
return null;
}
function getData( serverURL, objID ){
var ajax = createXMLHttpRequest();
ajax.open( "GET", serverURL );
ajax.onreadystatechange=function(){
if(( ajax.readyState == 4 ) && ( ajax.status == 200 )){
if(objID!=""){
var obj = document.getElementById( objID );
obj.innerHTML = ajax.responseText;
}
}
}
ajax.send( '' );
}
window.onload=function(){
document.getElementById("hoge").innerHTML="loading ..."
getData("loaddata.php","hoge");
}
</script>
<div id="hoge"></div>

//loaddata.php
<?
sleep(3);
?>
success!

きっちりやるならやはりajaxで処理する方がよいでしょう

viewdata.php
<script>
function createXMLHttpRequest(){
if( window.XMLHttpRequest ){
return new XMLHttpRequest();
}else if( window.ActiveXObject ){
try{
return new ActiveXObject( "Msxml2.XMLHTTP" );
}catch(e){
return new ActiveXObject( "Microsoft.XMLHTTP" );
}
}
return null;
}
function getData( serverURL, objID ){
var ajax = createXMLHttpRequest();
ajax.open( "GET", serverURL );
ajax.onreadystatec...続きを読む

Qjqueryを使って非同期通信で10秒ごとにリロード

jqueryを使って非同期通信で10秒ごとにリロードをさせようと
しているのですが、

setInterval(function(){
$(document.body).load("./hoge.php");
},10000);
とすると最初にリロードした10秒と次にリロードされた10秒が
一緒にカウントされているみたいで、リロードの間隔が
めちゃくちゃになってしまいます。
どなたかご教授ください。
よろしくお願いいたします。

Aベストアンサー

詳しいことは調べていないので分かりませんが、ロードに時間がかかっているために、間隔がめちゃくちゃに見えるだけではないでしょうか?

あと、setIntervalには色々と面倒があるようなので、それもチェックしてみてください。
http://www.mapee.jp/wlh/javascriptsetinterval.html

Q外部ファイルでBODYのonloadイベントの関数を指定するには?

(1)<BODY onload="funcA()">という形でなく、
ヘッダー内に入れた外部ファイルに
(2)document.body.onload=funcA;
としたいのですが、
「document.bodyはオブジェクトではありません」
というエラーになってしまいます。

<script language="javascript" src="xx.js">は
<head></head>の中に入れています。

どうしたら(2)の方法で、
外部ファイルでbodyのonloadイベントの関数を指定できるでしょうか?

Aベストアンサー

> やってみたのですが、「htmlfile:実装されていません」というエラーになってしまいました

原因になりそうなことを、とりあえず、二つほど思いつきます。

・関数や外部スクリプトファイル自体に問題がある

onload で実行される関数をうんと単純にしてみましょう。例えば、xx.js の中身を

function funcA() {
  alert("test");
}
document.body.onload=funcA;

だけにしてしまう。

これは、動くはずです。さっきの解答を書くときに確認したから。

・ハンドラの指定の書式が違う

document.body.onload=関数名 という書式は IE だけです。NN4.7x では無効な
書き方です(でも、違うエラーが出るはず)。

# NN6.x は手近にないので、確認できません。

Qリロード禁止

現在、CGIゲームを製作している者です

名前と得点を
http://www.~~~~~~/index.php?name=name&score=285
のようにしているのですが、この状態でリロードすると連続投稿みたいな感じになります

例えば
普通の状態
名無し 198点

リロードすると
名無し 198点
名無し 198点

のようになってしまいます

JavaScriptを使えば出来そうなのですが、わかりません

リロードできないようにするには、どうすればよいか教えてください

Aベストアンサー

>JavaScriptを使えば出来そうなのですが
JavaScriptでリロードを制限することはできません。

>現在、CGIゲームを製作している者です
CGI側がいじれるならばCGIでなんとかするしかないと思います。

Qjqueryでhtmlを読み込んだ後に処理をさせる

お世話になっております。
javascript初心者で最近、JQueryを使い始めた者です。

lightboxのようなモーダルウインドを作りたく、各ボタンのリンク先のファイルを読み込ませた後に
フェードインで読み込ませた要素を表示させたいのですが

以下のソースでは
#overLayerにaタグのリンク先のhtmlファイルを読み込ませた後にフェードインさせる処理がうまくいきません。
読み込ませるload1.htmlに画像を入れていると、フェードインしながら画像が読み込まれてしまいます。

画像付きhtmlファイルを画像データも含め完全に読みこみ終わった後に処理をするにはどのようにすればいいでしょうか?

ご回答宜しくお願いいたします。

//*****javascriptコード****
<script type="text/javascript">
$(function(){

//bodyに背景レイヤーとボックス表示用のレイヤーを追加
$("body").prepend("<div id='glayLayer'></div><div id='overLayer'></div>");
//$("#overLayer").hide();

//ローディング画像のプリロード
$("<img>").attr("src","images/loading.gif");

//背景レイヤークリック時の処理
$("#glayLayer").click(function(){
$(this).hide();
$("#overLayer").fadeOut("slow",function(){
$("#overLayer").html("");

});

});

//リンクボタンクリック時の処理
$("a.modal").click(function(){
$("#glayLayer").show();

$("#overLayer").show();
$("#overLayer").html("<img src='images/loading.gif'>");
$("#overLayer").data("file",$(this).attr("href"));

$("#overLayer").load($("#overLayer").data("file"),function(){
//alert("complete");
$("#overLayer").hide();
$("#overLayer").fadeIn(1000);

});
return false;
});

});
</script>

//****htmlソース****
<body>
<ul>
<li><a href="load1.html" class="modal">テスト1</a></li>
</ul>
</body>

お世話になっております。
javascript初心者で最近、JQueryを使い始めた者です。

lightboxのようなモーダルウインドを作りたく、各ボタンのリンク先のファイルを読み込ませた後に
フェードインで読み込ませた要素を表示させたいのですが

以下のソースでは
#overLayerにaタグのリンク先のhtmlファイルを読み込ませた後にフェードインさせる処理がうまくいきません。
読み込ませるload1.htmlに画像を入れていると、フェードインしながら画像が読み込まれてしまいます。

画像付きhtmlファイルを画像データも含め完...続きを読む

Aベストアンサー

load1.htmlファイルの読み込み完了までは上手く動作していると思います。

画像の読み込みもjsのload()メソッドで監視出来れば良いのですが。

解決案としては、
・load1.htmlをload()するjs側で画像をロードする。
・load1.htmlの中に、jsで画像の読み込み完了をload()メソッドで監視する。

--------------------------
上記のどちらかでどうでしょう。

Qサイトのリロード間隔を選択できるようにしたいのですが?

java初心者です。
以下の記述でページ全体を一定間隔にてリロードを繰り返させています。★★★★★の部分がリロード間隔となりますが、その部分を1分、5分、リロード無し、といったようにボタンで選べるようにしたいのですが、何か方法はありますでしょうか?よろしくお願いしますm<_ _>m

<script type="text/javascript" language="javascript">
setTimeout("location.reload(true)",★★★★★);
</script>

Aベストアンサー

おっと!!  早とちりでしたぁ!! すんません。

質問文にちゃんと書いてあるのに、勝手に勘違いしちゃってました。
(リロードを繰り返すのですね。提示のものも、初期値を1分とかに設定しておけばリロードしますけど?・・・ってのでは、インチキかな)  ^^)ゞ

No3様のご指摘のは、うっかりしてました。ご指導ありがとうございます。
う~ん、設定変えたらキャンセルして・・ってやってると、いつまでたってもリロードしなくなっちゃう可能性も・・

・・ってことで、設定した内容でリロードを繰り返すように修正しました。
(長くなっちゃったけど・・)
*時間の計測は、ロードした時から始めますが、「なし」を設定すると一旦
 キャンセルされて、他の設定時に再計測となります。
*クッキーの有効期間を設定していないので、ブラウザが終了するまで
 有効となります。これを、次のときも有効にしたい場合は、有効期限を
 指定してクッキーを設定すればよいです。

<html>
<head>
<script language="javascript">
var delay=0; var cnt=0; var flg=false;

window.onload=function(){
if (document.cookie){
var ck = document.cookie + ';'; // クッキーから値を取得
var st = ck.indexOf('interval=');
if (st>-1){
var ed = ck.indexOf(';',st);
delay = unescape(ck.substring(st + 9, ed));
}
}
// セレクターをセット
var sl = document.getElementById('hoge');
var e = sl.options;
for (i=0; i<e.length; i++){
if (e[i].value==delay){sl.selectedIndex=i;}
}
set_timer(); //カウンターセット
}
function set_timer(){
if (!flg && delay>0){
flg=true;
cnt = 0;
t_id=setInterval('timer()',1000);
}
}
function timer(){
cnt++;
if ((delay>0) && (cnt>=delay*60)){location.reload(true);}
if (cnt>301){clearInterval(t_id); flg = false;}
}
function set(e){
delay = e.options[e.selectedIndex].value;
document.cookie = 'interval=' + escape(delay); // クッキーへ書き込み
set_timer();
}
</script>
</head>
<body>
リロード:
<select id="hoge" onchange="set(this);">
<option value="1">1分</option>
<option value="5">5分</option>
<option value="0" selected>なし</option>
</select>
</body>
</html>

おっと!!  早とちりでしたぁ!! すんません。

質問文にちゃんと書いてあるのに、勝手に勘違いしちゃってました。
(リロードを繰り返すのですね。提示のものも、初期値を1分とかに設定しておけばリロードしますけど?・・・ってのでは、インチキかな)  ^^)ゞ

No3様のご指摘のは、うっかりしてました。ご指導ありがとうございます。
う~ん、設定変えたらキャンセルして・・ってやってると、いつまでたってもリロードしなくなっちゃう可能性も・・

・・ってことで、設定した内容でリロードを繰り返...続きを読む

Qbody onload にしない方法

外部jsにて
function chgBg() {
var n = 2;
var i = Math.floor(Math.random()*n);
var img = ['http~~~'];
document.getElementById('ID').style.backgroundImage = 'url(' + img[i] + ')';
}

っとし
htmlに
<body onload="chgBg()">
っとして、読み込み後にイメージをランダムに表示しています。
問題なく、動作はするのですが

<body onload="chgBg()">
ではなく
<body>
のまま、この動作をしたいのですが
js側に何か追加すればこれは可能なのでしょうか?


リロードするたびに、背景がランダムに表示することがしたいです。

Aベストアンサー

最後に
window.onload = chgBg;
っと加えるだけ。


人気Q&Aランキング

おすすめ情報