development

캐시 지우기가있는 window.location.reload

big-blog 2020. 6. 30. 08:01
반응형

캐시 지우기가있는 window.location.reload


이 질문에는 이미 답변이 있습니다.

JavaScript를 사용하여 페이지를 다시로드하고 싶지만 캐시도 지우고 싶습니다. 페이지를 새로 고치면 페이지에 서버의 모든 최신 버전이 있습니다.
IE를 제외한 다른 브라우저는 최신 컨텐츠를 얻지 못합니다.

IE9에 대한 솔루션?


reload() 캐시를 무시하고 하드로드를 수행하도록 지시하는 인수를 수락해야합니다.

location.reload(true);

신뢰성을 보증 할 수 없습니다. 더 자세히 조사하고 싶을 수도 있습니다.


몇 가지 방법으로이 작업을 수행 할 수 있습니다. 먼저이 메타 태그를 다음에 추가하십시오 head.

<meta http-equiv="Cache-control" content="no-cache">

캐시에서 문서를 제거하려면 expires메타 태그가 content속성을 다음 -1과 같이 설정하여 삭제해야합니다 .

<meta http-equiv="Expires" content="-1">

http://www.metatags.org/meta_http_equiv_cache_control

또한 IE는 기본 페이지의 최신 컨텐츠를 제공해야합니다. CSS 및 JS와 같은 외부 문서에 문제가있는 경우 URL 끝에 현재 시간 (밀리 초)으로 더미 매개 변수를 추가하여 절대 같지 않게하십시오. 이런 식으로 IE 및 기타 브라우저는 항상 최신 버전을 제공합니다. 예를 들면 다음과 같습니다.

<script src="mysite.com/js/myscript.js?12345">

업데이트 1

주석을 읽은 후에는 매번 프로그래밍 방식으로 캐시를 지우고 싶었습니다. 당신이 할 수있는 일은 JS에서 다음과 같은 기능을하는 것입니다.

eraseCache(){
  window.location = window.location.href+'?eraseCache=true';
}

그런 다음 PHP에서 다음과 같이 말하십시오.

<head>
<?php
    if (isset($_GET['eraseCache'])) {
        echo '<meta http-equiv="Cache-control" content="no-cache">';
        echo '<meta http-equiv="Expires" content="-1">';
        $cache = '?' . time();
    }
?>
<!-- ... other head HTML -->
<script src="mysite.com/js/script.js<?= $cache ?>"
</head>

이것은 테스트되지 않았지만 작동해야합니다. 기본적으로 JS 함수는 호출되면 페이지를 다시로드하지만 URL 끝에 GET 매개 변수를 추가합니다. 그러면 사이트에이 매개 변수를 찾는 백엔드 코드가 생깁니다. 존재하는 경우 타임 스탬프가 포함 된 메타 태그와 캐시 변수를 추가하고 캐싱 문제가있는 스크립트 및 CSS에 추가합니다.

업데이트 2

메타 태그는 실제로 페이지로드시 캐시 지우지 않습니다 . 따라서 기술적으로 JS에서 eraseCache 함수를 실행해야합니다. 일단 페이지가로드되면 변경 사항이 적용되도록 다시 로드해야 합니다 . 서버 측 언어로이 문제를 해결할 수 있어야합니다. 동일한 eraseCache JS 함수를 실행할 수 있지만 메타 태그를 추가하는 대신 HTTP 캐시 헤더를 추가해야합니다.

<?php
    header("Cache-Control: no-cache, must-revalidate");
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
?>
<!-- Here you'd start your page... -->

이 방법은 페이지를로드하기 전이나 실행하기 전에 캐시를 지우므로 페이지를 다시로드하지 않아도 즉시 작동합니다.


이 문제가 있었고 자바 스크립트를 사용하여 해결했습니다.

 location.reload(true);

당신은 또한 사용할 수 있습니다

window.history.forward(1);

사용자가 응용 프로그램에서 로그 아웃 한 후 브라우저 뒤로 버튼을 중지합니다.


나는이 자바 스크립트를 작성하고 헤더에 포함시켰다 (로드하기 전에). 작동하는 것 같습니다. 한 시간 전에 페이지가로드되었거나 상황이 정의되지 않은 경우 서버에서 모든 것이 다시로드됩니다. 1 시간 = 3600000 밀리 초는 다음 줄에서 변경할 수 있습니다. if (alter> 3600000)

버크와 관련하여

<script type="text/javascript">
//<![CDATA[
function zeit()
{
    if(document.cookie)
    {
        a = document.cookie;
        cookiewert = "";
        while(a.length > 0)
        {
            cookiename = a.substring(0,a.indexOf('='));
            if(cookiename == "zeitstempel")
            {
                cookiewert = a.substring(a.indexOf('=')+1,a.indexOf(';'));
                break;
            }
            a = a.substring(a.indexOf(cookiewert)+cookiewert.length+1,a.length);
        }
        if(cookiewert.length > 0)
        {
            alter = new Date().getTime() - cookiewert;

            if(alter > 3600000)
            {   
                document.cookie = "zeitstempel=" + new Date().getTime() + ";";
                location.reload(true);
            }
            else
            {
                return;
            }
        }
        else
        {
            document.cookie = "zeitstempel=" + new Date().getTime() + ";";
            location.reload(true);
        }
    }
    else
    {
        document.cookie = "zeitstempel=" + new Date().getTime() + ";";
        location.reload(true);
    }
}
zeit();
//]]>
</script>

내 경우에는 asp.net이 동작을 제어하기 때문에 reload ()가 작동하지 않습니다. 따라서이 문제를 해결하기 위해 해결 방법이 있지만이 방법을 사용했습니다.

self.clear = function () {
    //location.reload(true); Doesn't work to IE neither Firefox;
    //also, hash tags must be removed or no postback will occur.
    window.location.href = window.location.href.replace(/#.*$/, '');
};

참고URL : https://stackoverflow.com/questions/5721704/window-location-reload-with-clear-cache

반응형