Window.location.reload с четким кешем

Я хочу перезагрузить страницу с помощью JavaScript, но я хочу также очистить кеш, поэтому на странице обновления страница содержит последние версии всего, начиная с сервера.
Другие браузеры, кроме IE, не получают последний контент.

Любое решение для IE9?

Ответ 1

reload() должен принимать аргумент, который говорит ему выполнить жесткую перезагрузку, то есть игнорировать кеш:

location.reload(true);

Я не могу ручаться за его надежность, вы можете изучить это дальше.

Ответ 2

Вы можете сделать это несколькими способами. Один, просто добавьте этот метатег в свой head:

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

Если вы хотите убедиться, что материал, который уже был кеширован, будет удален, а метатег expires должен работать, чтобы удалить его, установив его на -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">

- ОБНОВЛЕНИЕ -

После прочтения комментариев я понимаю, что вы хотите программно стереть кеш, а не каждый раз. Что вы можете сделать, так это иметь функцию в JS:

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

Затем, в PHP, скажем, вы делаете что-то вроде этого:

<head>
<?php
  $cache = '';
  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-адреса. Тогда ваш сайт будет иметь код кода, который будет искать этот параметр. Если он существует, он добавляет метатеги и кэш var, который содержит метку времени, и добавляет ее в скрипты и CSS, с которыми вы сталкиваетесь с проблемами кэширования.

- ОБНОВЛЕНИЕ 2 -

Метатег действительно не стирает кеш в ON LOAD. Итак, технически вам нужно запустить функцию eraseCache в JS, как только страница загрузится, вам нужно загрузить ее AGAIN для изменений. Вы должны исправить это со своего языка на стороне сервера. Вы можете запустить ту же команду eraseCache JS, но вместо добавления метатегов запустите это в верхней части страницы:

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

 

 

Этот способ работает, потому что он стирает кеш до загрузки страницы и до того, как все будет запущено.

Ответ 3

У меня была эта проблема, и я решил ее использовать javascript

 location.reload(true);

вы также можете использовать

window.history.forward(1);

чтобы остановить кнопку назад, после входа пользователя из приложения.

Ответ 4

Я написал этот javascript script и включил его в заголовок (перед чем-то загружается). Кажется, это работает. Если страница была загружена более часа назад или ситуация undefined, она перезагрузит все с сервера. Время в один час = 3600000 миллисекунд может быть изменено в следующей строке: if (alter > 3600000)

Что касается, Birke

<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>

Ответ 5

Cache.delete() также может использоваться для очистки кеша для последних браузеров хрома, firefox и opera.

Ответ 6

В моем случае перезагрузка() не работает, потому что asp.net управляет поведением. Итак, чтобы решить эту проблему, я использовал этот подход, несмотря на то, что, похоже, работает.

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(/#.*$/, '');
};