\r\n```\r\n\r\nその対象ページにアクセスがあったら、「1度」だけ更新(F5)させるような作りを実装させたいです。\r\n色々調べて自分なりに作ったところ上記のようになりました。\r\n\r\nしかし、上記コードだと毎秒?ずーっと更新されつづけてしまうため困っております。\r\nたった「1度」だけ更新させるにはどのような手法でできますでしょうか?\r\n\r\nご存じの方いらっしゃいましたら教えて頂けませんでしょうか?","answerCount":2,"upvoteCount":0,"datePublished":"2016-01-21T01:41:22.977Z","dateModified":"2016-01-21T01:41:22.977Z","acceptedAnswer":{"@type":"Answer","text":"```javascript\r\n\r\n```\r\n\r\nリロード済みの時はリロード処理を実行しないようにしないと、\r\n永遠とループしてしまうので、それがうまく行かない原因です。\r\n","dateModified":"2016-01-21T02:08:32.607Z","datePublished":"2016-01-21T02:04:03.749Z","upvoteCount":0,"url":"https://teratail.com/questions/25215#reply-39671"},"suggestedAnswer":[{"@type":"Answer","text":"確かにこのコードでは\r\n\r\n画面を表示する → onload が走る → setTimeoutが実行される → 0秒でmyfunc()が実行される → reloadが実行される → 画面を表示する → onlodaが走る → ・・・ \r\n\r\nを延々と繰り返すことになります\r\n\r\n1度だけにしたいなら「今開いている画面からの更新であること」を何かしらの方法で記憶し判定する必要があります\r\n\r\n方法には\r\n\r\ncookieを使用する\r\nlocalstrageを使用する\r\nURLパラメータを使用する\r\n\r\nなどが思いつきます\r\n\r\nURLパラメータを使う例\r\n\r\n```javascript\r\nwindow.onload = function() {\r\n console.log('onload 2');\r\n var query = window.location.search.substring(1);\r\n if( query.length == 0 ){\r\n setTimeout(\"myfunc()\",0);\r\n }\r\n}\r\nfunction myfunc() {\r\n// window.location.reload(true);\r\n window.location = window.location + \"?0\";\r\n}\r\n```","dateModified":"2016-01-21T02:26:17.244Z","datePublished":"2016-01-21T02:24:13.679Z","upvoteCount":1,"url":"https://teratail.com/questions/25215#reply-39682","comment":[]}],"breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"トップ","url":"https://teratail.com"},{"@type":"ListItem","position":2,"name":"プログラミング言語に関する質問","url":"https://teratail.com/tags/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E"},{"@type":"ListItem","position":3,"name":"プログラミング言語","url":"https://teratail.com/tags/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E"}]}}}
質問するログイン新規登録
プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

14822閲覧

javascript ページを更新(F5)させる方法について

EzrealTrueshot

総合スコア389

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2016/01/21 01:41

0

0

お世話になっております。Ezです。

JavaScriptについて詰まってしまいまして、お知恵を拝借できないでしょうか?

<script> window.onload = function() { console.log('onload 2'); setTimeout("myfunc()",0); } function myfunc() { window.location.reload(true); } </script>

その対象ページにアクセスがあったら、「1度」だけ更新(F5)させるような作りを実装させたいです。
色々調べて自分なりに作ったところ上記のようになりました。

しかし、上記コードだと毎秒?ずーっと更新されつづけてしまうため困っております。
たった「1度」だけ更新させるにはどのような手法でできますでしょうか?

ご存じの方いらっしゃいましたら教えて頂けませんでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

確かにこのコードでは

画面を表示する → onload が走る → setTimeoutが実行される → 0秒でmyfunc()が実行される → reloadが実行される → 画面を表示する → onlodaが走る → ・・・

を延々と繰り返すことになります

1度だけにしたいなら「今開いている画面からの更新であること」を何かしらの方法で記憶し判定する必要があります

方法には

cookieを使用する
localstrageを使用する
URLパラメータを使用する

などが思いつきます

URLパラメータを使う例

javascript

1window.onload = function() { 2 console.log('onload 2'); 3 var query = window.location.search.substring(1); 4 if( query.length == 0 ){ 5 setTimeout("myfunc()",0); 6 } 7} 8function myfunc() { 9// window.location.reload(true); 10 window.location = window.location + "?0"; 11}

投稿2016/01/21 02:24

編集2016/01/21 02:26
takito

総合スコア3116

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

javascript

1<script> 2window.onload = function() { 3 console.log('onload'); 4 setTimeout(myfunc,0); 5} 6 7function myfunc() { 8 var isReloaded = false; //リロード済みかどうかの確認フラグ用変数 9   10 //リロード済みでなければリロードを実行 11 if (isReloaded !== false) { 12 window.location.reload(true); 13 isReloaded = true; //リロード後にリロード履歴フラグをtrueにセット 14 } 15} 16</script>

リロード済みの時はリロード処理を実行しないようにしないと、
永遠とループしてしまうので、それがうまく行かない原因です。

投稿2016/01/21 02:04

編集2016/01/21 02:08
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

EzrealTrueshot

2016/01/21 02:09

ありがとうございます!
退会済みユーザー

退会済みユーザー

2016/01/21 02:25 編集

あ、ごめんなさい!ページが再読み込みされてしまうとフラグ用の変数に保持していた値も初期化されてしまうので、書いたコードではうまく機能しないですよね。。。 クッキーやlocal storageに読み込み済みかどうかの情報を保存して、そのクッキーに保存した情報をもとに条件分岐させないとダメですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.29%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問