• ベストアンサー

ページを一回だけリロードさせる方法

こんにちは いつもお世話になっています 表題の通りページを読み込んだ後にすぐ 一回だけリロードさせたいのですが どのような方法があるでしょうか? location.reload(); だと永遠にリロードしてしまいます・・・

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

  • ベストアンサー
回答No.5

では、Cookieを使わない方法。ちとダーティですが。 <HEAD> <SCRIPT LANGUAGE="JavaScript1.2"> function pageJump () { if (!top.location.href.match(/\?1$/)) { top.location.href += "?1" } } //--> </SCRIPT> </HEAD> <BODY onLoad='pageJump()'> .... 一度普通に読まれたとき、URLの末尾が「?1」でなければ、それを くっつけてhrefに代入し、読みこみなおします。 "?1"は普通CGIへの引数ですが、通常のHTMLファイルがちゃんと呼び 出されます(エラーになりません)。単純に無視されます。 よって、一度呼ばれたことを表すフラグに使えます。 <A NAME=...>なんかで使う"#1"でもいいんじゃないの?、と おっしゃる鋭いひともいらっしゃるでしょうが、これだとブラウザが単純に 「同じファイルの#1ラベルの場所…ないや、じゃあ先頭を表示しとこう」 と判断して表示は変化せず、サーバにアクセスしにもいきません。 「?1」無しと「?1」つきだと、別ファイルだと思って2度アクセスに 行きます。

すると、全ての回答が全文表示されます。

その他の回答 (6)

回答No.7

akijiroさんの回答、なかなか参考になりますが、気になった点が ありましたので失礼ながらちょっとコメントさせていただきます。 CGIスクリプトで切り分けるというのはいいアイデアですね。しかし、 URLを変えていいのでしたら、onlord=location.reload があるのと ないのと、二つのほぼそっくりなHTMLファイルを用意すれば済む 話ですね。 それからサンプルのスクリプトですが、読みこむファイルにflockを掛けるのは 無駄だと思うのですが、なにか意味があるのでしょうか。 リファラーもいい方法に思えますが、ブラウザの中にはリロードした ときにちゃんとdocument.refererを置きかえるかどうか、怪しいものが あります。また、リロード時にundefinedになるのを期待するとしたら、 ブックマークで飛んできたときとの区別がつかないと思うのですが。 「専門家」ということでしたのでちょっとぐらい突っ込んでも平気だろう、 と思い、なんだか細かいことを指摘してしまいました。お気を悪く されたらお詫び申しあげます。

すると、全ての回答が全文表示されます。
  • akijiro
  • ベストアンサー率25% (2/8)
回答No.6

javascriptではなく、 perlではどうですか。 location.xxx.cgiで読み込んで、 cgiがそのファイルを読み込むときに置換とか。 間違っていたらごめんなさい。 即席で作ったソースです。 $file_thanks ="./xxx.html"; print "Content-type: text/html\n\n"; open(BHTML,"<$file_thanks"); flock(BHTML,2); while(<BHTML>) { s/onlord=location.reload//; print; } flock(BHTML,8); close(BHTML); これで読み込めば、出来るかも。ただ、これだとパスが xxx.cgiになってしまうので、baseタグでも入れておけば 問題ないと思います。 やったことはないですが、SSIで呼び出しても出来るかも? javascriptにこだわるなら、javascriptで、リファラーをとって???.com/xxx.html だったら置換するか処理をしない分岐を作れば問題ないでしょう。 cokkieはあまりすかれないので避けたほうが無難。 私は常にcokkieとjavascriptはオフにしています。 簡単な回答ですいません。 他に気づきましたらまた書きます。

すると、全ての回答が全文表示されます。
  • mkim
  • ベストアンサー率67% (25/37)
回答No.4

こんばんわ。 私も、どうしても1回だけ、何のアクションも起こさずに リロードしたいならクッキーを使うしかないと思います。 <body>onLoadを使うにしても、再読み込みが入ると永遠に 繰り返してしまいますからね。 要するに、どこかに変数なり、一度リロードしたと言うフラグを 持たないことには、永遠に繰り返されてしまうと思います。 count=getCookie("COUNT"); if(count==null){ setCookie("COUNT",1); location.reload(); } 上の記述が正しいかどうかは、ちょっとわかりませんが、考え方として クッキーから変数COUNTを取得し、countに代入する。 そんで、countがnullならまだリロードしてないので、クッキーに COUNT=1と言うデータを保存する。 それから、リロードを入れると、2回目以降は、countがnullでないので if文の中を通らないと言う風になる。(予定) テストも何もしてないので、これで成功するかは、わかりませんけど 一つの考え方として提案させていただきました。 クッキー自体を無効にされたら、その地点でおしまいですけど^^;; がんばってください。

すると、全ての回答が全文表示されます。
  • hequil
  • ベストアンサー率65% (242/372)
回答No.3

根本的に1回だけリロード処理が必要な時点で 設計ミスのような気がするんですが・・ #JavaScript無効にしてあったらどーするんだろう、とか とりあえず、他に思いついたのは <script type="text/javascript"><!-- rload = setTimeout( "location.reload()", 100 ); clearTimeout( rload ); // --></script> とかどうでしょう? うまくいくような気はしますが未確認です(苦笑) 参考まで

noname#38849
質問者

補足

解答ありがとうございます javaScriptが無効にしてあったらお手上げですね ^^; ご指摘のように setTimeoutで試してるのですが、上手くいきませんね 何故でしょうか????? (>_<)

すると、全ての回答が全文表示されます。
  • hequil
  • ベストアンサー率65% (242/372)
回答No.2

<BODY onLoad="location.reload();"> でご要望の処理が出来ると思います。 参考まで

noname#38849
質問者

補足

解答アリガトウゴザイマス <BODY onLoad="location.reload();"> でも、やはり永遠にリロードして無限ループになるようですが・・・

すると、全ての回答が全文表示されます。
  • akino4
  • ベストアンサー率18% (35/185)
回答No.1

どうしても同じページをリロードしたいのですか? とりあえず別に似たようなページを作ればいいだけなら 別のページをリロードすればいいだろうし、 どうしても同じページにこだわるなら、cokkieでフラグをたてるのが簡単かな? でも、このときはクッキー無効にしてる人がいることを考えてやらないと 大変なことになるからきをつけてね。 あとは、CGIなんかと連携してhiddenタグに埋め込んでおくとか。

すると、全ての回答が全文表示されます。

関連するQ&A