programing

window.location.Clear 캐시가 있는 reload

muds 2023. 9. 23. 23:10
반응형

window.location.Clear 캐시가 있는 reload

자바스크립트를 이용해서 페이지를 다시 로드하고 싶은데 캐시도 지우고 싶어서 페이지 새로 고침에 서버의 모든 것을 최신 버전으로 보여줍니다.
IE를 제외한 다른 브라우저는 최신 콘텐츠를 얻지 못하고 있습니다.

IE9에 대한 해결책이 있습니까?

reload()캐시를 무시하고 하드 새로고침을 하라는 인수를 받아들이도록 되어 있습니다.

location.reload(true);

신뢰성을 보증할 수는 없지만 좀 더 조사해 보셔야 할 수도 있습니다.


편집(2021): 매개 변수는 표준화된 적이 없으며 더 최신 브라우저에서 더 이상 사용되지 않고 제거되었습니다.분기마다 이 사실을 설명하는 코멘트를 추가하는 것은 도움이 되지 않습니다.

몇 가지 방법으로 할 수 있습니다.하나, 이 메타 태그를 당신의 것에 추가하기만 하면 됩니다.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 함수를 호출하면 페이지가 다시 로드되지만 GET 매개변수를 URL 끝에 추가합니다. 그러면 사이트에 이 매개변수를 찾는 백엔드 코드가 있습니다.존재하는 경우 메타 태그와 타임스탬프가 포함된 캐시 변수를 추가하고 캐시 문제가 있는 스크립트 및 CSS에 추가합니다.

업데이트 2

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

<?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);

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

제 경우에는 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(/#.*$/, '');
};

이 javascript 스크립트를 작성하여 헤더에 포함하였습니다(로딩하기 전에).효과가 있는 것 같습니다.페이지가 한 시간 이상 전에 로드되었거나 상황이 정의되지 않은 경우 서버에서 모든 것을 다시 로드합니다.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>

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

반응형