QA@IT

ページのロード後、1度だけリロード

5041 PV

タイトルの通り、1度だけリロードしたいです。
javascript(jQuey)では

$(function(){
  $(location).attr("href", "◯◯◯");
});

でリロードはできるのですが、当然無限ループしてしまいます。

サーバサイドではphpを使っているので、もしphpでも可能であるなら教えて頂きたいです。

回答

リロードしたい目的が見えないので期待に添うかわかりませんが、簡単な方法としてはGETパラメータを付加する、リファラを確認するなどがあるでしょう。

<!DOCTYPE html>
<html>
<head lang="ja">
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
    <script>
        $(function () {
            var urls = $(location).attr("href").split("?");
            var reloadedSign = "reloaded=reloaded";
            var reloadTo = (urls.length > 1 ? urls + "&" : "?") + reloadedSign;

            if($(location).attr("href").indexOf(reloadedSign) == -1
                    || document.referrer.indexOf(urls[0]) == -1 )
                $(location).attr("href", reloadTo);
        });
    </script>
</head>
<body>
    <script>
        document.write((Date.now()).toString());
    </script>
</body>
</html>

しかしGETパラメータもリファラも偽装できますので万能ではありません。

サーバーサイドならGETなら自動的に自分にPOSTするスクリプトを埋めてPOSTなら埋め込まないといった手もあります。
これも外部からPOSTすれば回避できます。

これ以上はどこまでやるかとそもそも目的がなにかに依ります。
たとえばキャッシュさせたくないのが理由であれば上記もあまりが意味ないでしょう。

編集 履歴 (0)
  • ありがとうございました!助かりました! -
ウォッチ

この質問への回答やコメントをメールでお知らせします。