- ベストアンサー
ユーザーが更新ボタンを押さなくても自動的にリロードさせるには?
ブラウザの更新ボタンを閲覧ユーザーが押さなくても自動的にリロードさせる方法はありますか? メニューを取っ払った小ウインド内を、ユーザーが閲覧するたびに更新させたいのですが、メニューを取っ払っているため、更新ボタンもありません。 良い方法をご存知の方がいましたら、教えて下さいませ。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
> これだと、いくらスクリプトを埋め込んでいても、更新されない可能性がありますかね? はい、セッションクッキーはブラウザを終了するまで保持されるので、ブラウザは一度閉じないとだめです。しかも、クッキーをセットしたウィンドウだけでなく、同じブラウザのウィンドウは全て閉じないとクッキーが消えないことがあるようです。 親側での nWin.location.reload(true); でうまく行くようなら、こちらの方が面倒がなくていいでしょうね。
その他の回答 (6)
- leaz024
- ベストアンサー率75% (398/526)
No.5 のお礼を読んだのですが、自動的にリロードしたいのって attention.html の方ではないのですか?この方法だと子ウィンドウを生成している方のウィンドウがリロードされてしまいますが・・・ それでよいのだとするとこれ以上は難しい気がしますが、先の指摘のように attention.html を自動更新したいのなら、No.5 のスクリプトを attention.html の方に記述すれば解決できるかも知れません。 また、attention.html は window.open で開いているので、生成部で nWin = window.open("attention.html","","scrollbars=1,width=600,height=700"); nWin.location.reload(true); // この行を追加 としても同様に1回だけリロードされます。 ※ただしこの方法だと、attention.html に直接アクセスされた時にはリロードされませんので、その可能性があるなら前述の方法の方がよいでしょう。
補足
はい、attention.htmlの内容を更新させたいわけです。 ちなみに、attention.html内にも、<SCRIPT></SCRIPT>で記述してあったのですが、同じく上手く更新されるときと出来ないときがありました。 >この方法だと子ウィンドウを生成している方の >ウィンドウがリロードされてしまいますが・・・ あっ確かにそうですね。失礼しました。 attention.html直接アクセスは無いので、ご教授くださった方法で試してみたいと思います。 ちなみにひょっとしたら、いったんブラウザを終了させてから、再び起動し、該当部分をクリックし、子ウインド内を閲覧したときは更新されていたかもしれません。 更新されなかったときは、立ち上げたままのブラウザで、該当部分をクリックし閲覧したときだったような気がします。今思えばですが・・ これだと、いくらスクリプトを埋め込んでいても、更新されない可能性がありますかね?
- leaz024
- ベストアンサー率75% (398/526)
URLにパラメータをつければ再読込するものと思っていましたが、htmlページではダメなのかも知れませんね。 もし、「location.reload() なら確実にリロードされる」のであれば、リロード済みチェックにセッションクッキーを利用すれば対処できると思います。 if (document.cookie.indexOf("reloaded") == -1) { document.cookie = "reloaded"; if (document.cookie.indexOf("reloaded") != -1) { location.reload(true); } } ・最初はクッキーに "reloaded" がないので、それをセットしてリロードします。 ・リロード後(2回目)にはクッキーがあるのでリロードしません。 ・ブラウザを終了すればクッキーはなくなるので、次回は「初回」と判定されてリロードされます。 ちなみに、クッキーの有無を二重にチェックしているのは、「JavaScriptは有効だけどCookieは無効」という環境(あまりないと思いますが^^;)でリロードしっぱなしになるのを防ぐためです。 クッキーの有効チェックは navigator.cookieEnabled でも可能ですが、これはサポートしないブラウザがあるので、「セットしたクッキーが見つからなければCookieは無効(有効の時だけリロード)」というチェック方法を採っています。
お礼
ちょっとだけ文面を編集したときは上手く行くようだったのですが、数行追加したりしてちょっと多めの編集を行ったときには上手く更新されませんでした。 念のため、ブラウザのインターネットオプションの制限に引っかからないように、信頼済みサイトに登録(セキュリティ[低])してみて操作しています。 子ウインド生成のjavascriptのjsファイルに記述しても、子ウインド内に表示させているHTML内に直接記述しても、上手くいきませんでした。 参考までに、子ウインド生成のjavascriptは以下です。 ご面倒であければ、ご意見お聞かせくださるとうれしいです。 ---------------------------------------- //★子ウィンドウ生成(記述前)// var nWin; var fFlag; function MakeChildWindow() { nWin = window.open("attention.html","","scrollbars=1,width=600,height=700"); } function FocusChild() { fFlag = fFlag ^ 1; if (fFlag) { nWin.focus(); } } ---------------------------------------- //★子ウィンドウ生成(記述後)// var nWin; var fFlag; function MakeChildWindow() { nWin = window.open("attention.html","","scrollbars=1,width=600,height=700"); if (document.cookie.indexOf("reloaded") == -1) { document.cookie = "reloaded"; if (document.cookie.indexOf("reloaded") != -1) { location.reload(true); } } function FocusChild() { fFlag = fFlag ^ 1; if (fFlag) { nWin.focus(); } }
補足
どうもわざわざありがとうございます! お教えいただいた方法で、今のところ上手くいっているようです。 もうしばらくいろいろな事例でテストしてみたいと思います。 取り急ぎにて。
- leaz024
- ベストアンサー率75% (398/526)
No.2、3 の方法では「最初の1回だけリロード」することはできません。 リロードするとそのページの JavaScript も1から実行されるので、「ページ表示」→「location.reload() 実行」→「再読み込み」を繰り返してしまうからです。(ブリンクしているような感じになるのはそのためです。) これを最初の1回しかリロードされないようにするには、q=844652 の No.2 のようにリロードしたことを示すダミーパラメータを用い、それをチェックしてリロードの要不要を判断するようにします。 if (location.search.indexOf("reloaded") == -1) // パラメータに reloaded がなければ、 location.search += (location.search ? "&" : "?") + "reloaded"; // つけて再読み込み ところで、通常はページを開いた時には最新の状態が表示されるはずなので、開くと同時にリロード、というのは必要ない気がします。 必要になればコンテキストメニューやショートカットキーを使って更新できますし、それでは不親切と思われるならば <input type="button" value="更新" onClick="location.reload()"> のような更新ボタンを用意すればいいように思います。
お礼
どうもありがとうございます! 確かに、教えていただいたANo.3の方法でも、ANo.2と同様に、子ウインドのタイトル(左上部分)が、タイトル名⇔読み込みHTML名の繰返しでブリンクしているようになり、子ウインド内には何も表示されませんでした。 ただ、ANo.3の方の参考URL先にあった、サンプル1のスクリプトを以下のように改良して用いたら、上手くいくのかな?・・・と思っていましたが、どうでしょう? <SCRIPT Language="JavaScript"> <!-- function winEvent(theEvent){} window.onload = winEvent; // --> </SCRIPT> もちろん、leaz024さんにご教授いただいた方法で、上手くリロードされることは確認できましたので、実際はこちらを使わせていただきたく思っています。 >ところで、通常はページを開いた時には >最新の状態が表示されるはずなので、 >開くと同時にリロード、というのは必要ない >気がします。 私もそう思っていたのですが、自宅PCのブラウザで子ウインドを閲覧したら、特にスクリプトを組み込んでいなくても最新状態が表示されたのですが、会社PCのブラウザからだと、子ウインド内が最新になってくれませんでした。(会社環境はプロキシを経由しているせいなのかも・・・) 子ウインド自体、メニューを取ったデザインになっており、特に毎回内容に更新があるわけでもないので、閲覧ユーザー側に更新操作を意識させないで、最新表示されるようにしたかったのです。 また、子ウインド内には、利用規約などの重要事項を書いているので、その文章の添削を行ったときに閲覧ユーザー側には最新内容が伝わるようにしなければならなかったので、今回お教えいただいた方法は大変助かります。
補足
上手くいったと思い、下のお礼欄に書かせていただいた後で、再度、会社環境で実験してみましたが、やはり更新されませんでした。 右クリックの「最新の情報に更新」を行うと、子ウインド内は、ちゃんと更新されるのですが・・・ ちなみに、サンプル1のスクリプト改でも、同様にだめでした。 会社環境に問題があるのですかねぇ。。。 ちょっと、他の方法を模索してみたいと思います。
- BENGAL
- ベストアンサー率73% (22/30)
<BODY onLoad='location.reload()'> 読み込まれた時に、1回実行されます。 onLoadは、自動的にフォームをサブミットしたり、JavaScriptを表示した時に1度実行する際、便利です(^^) お役に立てれば幸いです。
- senbei99
- ベストアンサー率55% (876/1588)
「自動的にリロード」とは、そのページを開いたときにリロードするという意味で良いのでしょうか。 であるのならば、過去の回答に以下の回答があります。 http://okweb.jp/kotaeru.php3?q=844652 この回答にある <script>location.reload()</script> で対応できるはずです。 なお、一定時間毎に自動的にリロードするという意味であれば、#1の方の回答になります。
補足
ん~、用いてみましたが、小ウインド内が上手く表示されず、小ウインド自体がブリンクしているような感じに・・・ 小ウインド自体、javascriptで生成しているのですが。。。
- hime_mama
- ベストアンサー率32% (1542/4716)
HTMLのヘッド部分に、<META>タグを挿入するだけです。 <META HTTP-EQUIV="refresh" CONTENT="60;URL=***.html"> と記載すればOK。 ↑の"60"は60秒後という意味なので、その部分を任意の秒数にすればよいです。
補足
早速、ありがとうございます。 上記の方法は知っているのですが、何秒間に一回のリロードではなく、閲覧したと同時に(該当ページが開かれたと同時に)最初に一回だけリロードさせたいのです。
お礼
お礼遅くなりました。 ブラウザを一度終了させ再起動させたら上手く更新されているようです。 重くならないようであれば、最終的に子ウインドと更新させたいhtmlの両方に、ご教授いただいたスクリプトを組み入れて使いたいと思います。 このたびは、お付き合い下さって本当にありがとうございました。 大変、勉強にもなりました。
補足
ほんとうに何度もご回答ありがとうございます! 助かります。 念のため、子ウインドと更新させたいhtml、両方に組み入れて、テストをおこなってみたいと思います。 取り急ぎ、ご報告まで。