5

この質問のより良いタイトルがある場合は、自由に編集してください。

長い間、私はいつもlocation.reload()ページをリロードしていました - それは最も論理的なことですよね?

しかし、最初に考えていたように、F5 と同等ではなく、Ctrl+F5 に相当するものであることに最近気付きました。すべての画像とその他のリンクされたファイルがサーバーから再要求されましたが、ページをリロードするだけでした。

私は使用できることを発見しましたlocation.replace(location.href).これは私が望む効果を達成するように見えます.ページをリロードしますが、リンクされたファイルをキャッシュから取得します.

これは理想ですか?これよりも良い方法はありますか?この方法の落とし穴を見落としていませんか?

filemtime(注: をクエリ文字列として追加することにより、スクリプトなどのリンクされたファイルのキャッシュ無効化管理を既に行っています)

4

1 に答える 1

4

私自身の質問への回答として、大きな落とし穴があります。場所にハッシュが含まれている場合、ブラウザはページをリロードする代わりにそのハッシュにジャンプします。

私が実装した解決策は次のとおりです。

reload = (function() {
    var m = location.search.match(/[?&]__hash=([^&]+)/);
    if( m) location.hash = unescape(m[1]);
    return function() {
            var h = location.hash;
            if( h == "") {
                    location.replace(location.href);
            }
            else {
                    var s = location.search;
                    s = s.replace(/[?&]__hash=[^&]+/,'');
                    s += (s == "" ? "?" : "&")+"__hash="+escape(h);
                    location.replace(location.pathname+s);
            }
    };
})();

サーバー側で何も使用しないと仮定すると$_GET['__hash']、これは安全に使用できます。

于 2012-07-17T03:35:41.330 に答える