Как программно очистить кеш браузера? - PullRequest
102 голосов
/ 16 ноября 2011

Я ищу способ программно очистить кеш браузера.Я делаю это, потому что приложение кэширует конфиденциальные данные, и я хотел бы удалить их, когда вы нажимаете «Выйти».Это произойдет либо через сервер, либо через JavaScript.Конечно, использование программного обеспечения на чужом / общедоступном компьютере по-прежнему не рекомендуется, поскольку существует больше опасностей, таких как клавиатурные шпионы, которые просто невозможно победить на программном уровне.

Ответы [ 10 ]

137 голосов
/ 16 ноября 2011

Там никак браузер позволит вам очистить свой кеш.Это было бы огромной проблемой безопасности, если бы это было возможно.Этим можно легко злоупотребить - минута, когда браузер поддерживает такую ​​«функцию», будет минутой, когда я удаляю ее с моего компьютера.

Что вы можете сделать, это запретить кэшировать вашу страницу, отправив соответствующие заголовки или используя следующие метатеги:

<meta http-equiv='cache-control' content='no-cache'>
<meta http-equiv='expires' content='0'>
<meta http-equiv='pragma' content='no-cache'>

Возможно, вы захотитерассмотреть возможность отключения автозаполнения в полях формы, хотя, боюсь, есть стандартный способ сделать это ( см. этот вопрос ).

Несмотря на это, я хотел бы отметить, чтоесли вы работаете с конфиденциальными данными, вы должны использовать SSL.Если вы не используете SSL, любой, у кого есть доступ к сети, может прослушивать сетевой трафик и легко видеть то, что видит ваш пользователь.

Использование SSL также заставляет некоторые браузеры не использовать кэширование, если явносказал, чтобы.См этот вопрос .

35 голосов
/ 08 ноября 2012

Возможно, вы можете просто использовать jQuery, чтобы заменить «метатег», который ссылается на состояние кэша, обработчиком / кнопкой события, а затем обновить, просто,

$('.button').click(function() {
    $.ajax({
        url: "",
        context: document.body,
        success: function(s,x){

            $('html[manifest=saveappoffline.appcache]').attr('content', '');
                $(this).html(s);
        }
    }); 
});

ПРИМЕЧАНИЕ. Это решение зависит отв кэше приложений, который реализован как часть спецификации HTML 5.Также требуется настройка сервера для настройки манифеста кэша приложений.В нем не описан метод, с помощью которого можно очистить «традиционный» кэш браузера с помощью клиентского или серверного кода, что практически невозможно.

13 голосов
/ 21 января 2017

сам используйте html. Есть один прием, который можно использовать. Этот прием заключается в добавлении параметра / строки к имени файла в теге сценария и изменении его при внесении изменений в файл.

<script src="myfile.js?version=1.0.0"></script>

Браузер интерпретирует всю строку как путь к файлу, даже несмотря на то, что идет после "?" параметры. Таким образом, теперь происходит то, что в следующий раз, когда вы обновите свой файл, просто измените номер в теге script на вашем веб-сайте (пример <script src="myfile.js?version=1.0.1"></script>), и браузер каждого пользователя увидит, что файл изменился, и получит новую копию.

7 голосов
/ 15 сентября 2016

Лучше всего сделать генерацию файла js с именем + некоторый хеш с версией, если вам нужно очистить кеш, просто сгенерируйте новые файлы с новым хешем, это заставит браузер загрузить новые файлы

3 голосов
/ 23 октября 2017

Изначально я пробовал различные программные подходы в моем html, JS, чтобы очистить кеш браузера.На последней версии Chrome ничего не работает.

Наконец-то я получил .htaccess:

<IfModule mod_headers.c>
    Header set Cache-Control "no-cache, no-store, must-revalidate"
    Header set Pragma "no-cache"
    Header set Expires 0
</IfModule>

Протестировано в Chrome, Firefox, Opera

Ссылка: https://wp -mix.com / отключить кэширование-Htaccess /

3 голосов
/ 16 мая 2017

location.reload (истина);сильно перезагрузит текущую страницу, игнорируя кеш.
Cache.delete () также может использоваться для новых Chrome, Firefox и Opera.

3 голосов
/ 27 июля 2016

В Chrome вы сможете сделать это, используя расширение для тестирования.Вам нужно запустить Chrome с помощью следующих переключателей:

./chrome --enable-benchmarking --enable-net-benchmarking 

В консоли Chrome теперь вы можете делать следующее:

chrome.benchmarking.clearCache();
chrome.benchmarking.clearHostResolverCache();
chrome.benchmarking.clearPredictorCache();
chrome.benchmarking.closeConnections();

Как вы можете видеть из приведенных выше команд, это не толькоочищает кеш браузера, но также очищает кеш DNS и закрывает сетевые подключения.Это замечательно, когда вы проводите сравнение времени загрузки страницы.Очевидно, что вам не нужно использовать их все, если они не нужны (например, clearCache () должно быть достаточно, если вам нужно очистить только кеш и не заботиться о кеше DNS и соединениях).

1 голос
/ 10 июля 2018

//The code below should be put in the "js" folder with the name "clear-browser-cache.js"

(function () {
    var process_scripts = false;
    var rep = /.*\?.*/,
    links = document.getElementsByTagName('link'),
    scripts = document.getElementsByTagName('script');
    var value = document.getElementsByName('clear-browser-cache');
    for (var i = 0; i < value.length; i++) {
        var val = value[i],
            outerHTML = val.outerHTML;
        var check = /.*value="true".*/;
        if (check.test(outerHTML)) {
            process_scripts = true;
        }
    }
    for (var i = 0; i < links.length; i++) {
        var link = links[i],
        href = link.href;
        if (rep.test(href)) {
            link.href = href + '&' + Date.now();
        }
        else {
            link.href = href + '?' + Date.now();
        }
    }
    if (process_scripts) {
        for (var i = 0; i < scripts.length; i++) {
            var script = scripts[i],
            src = script.src;
            if (src !== "") {
                if (rep.test(src)) {
                    script.src = src + '&' + Date.now();
                }
                else {
                    script.src = src + '?' + Date.now();
                }
            }
        }
    }
})();
At the end of the tah head, place the line at the code below

    < script name="clear-browser-cache" src='js/clear-browser-cache.js' value="true" >< /script >
1 голос
/ 17 марта 2018

Теперь вы можете использовать Cache.delete ()

Пример:

let id = "your-cache-id";
// you can find the id by going to 
// application>storage>cache storage 
// (minus the page url at the end)
// in your chrome developer console 

caches.open(id)
.then(cache => cache.keys()
  .then(keys => {
    for (let key of keys) {
      cache.delete(key)
    }
  }));

Работает в Chrome 40+, Firefox 39+, Opera 27+ и Edge.

0 голосов
/ 28 апреля 2017

Представьте, что .js файлы размещены в /my-site/some/path/ui/js/myfile.js

Так что обычно тег сценария будет выглядеть так:

<script src="/my-site/some/path/ui/js/myfile.js"></script>

Теперь измените его на:

<script src="/my-site/some/path/ui-1111111111/js/myfile.js"></script>

Теперь, конечно, это не сработает.Чтобы это работало, вам нужно добавить одну или несколько строк в ваш .htaccess Важная строка: (весь .htaccess внизу)

RewriteRule ^my-site\/(.*)\/ui\-([0-9]+)\/(.*) my-site/$1/ui/$3 [L]

Итак, что это делает, это отчасти удаляет1111111111 от пути и ссылки на правильный путь.

Так что теперь, если вы вносите изменения, вам просто нужно изменить номер 1111111111 на любой номер, который вы хотите.И как бы вы ни включали свои файлы, вы можете установить это число с помощью отметки времени, когда js-файл был последний раз изменен.Так что кеш будет работать нормально, если число не меняется.Если он изменится, он будет обслуживать новый файл (ДА ВСЕГДА), потому что браузер получает полный новый URL и просто считает, что файл настолько новый, что он должен его получить.

Вы можете использовать это для CSS,favicons и то, что когда-либо кэшируется.Для CSS просто используйте так:

<link href="http://my-domain.com/my-site/some/path/ui-1492513798/css/page.css" type="text/css" rel="stylesheet">

И это будет работать!Простое обновление, простое обслуживание.

Обещанный полный .htaccess

Если у вас еще нет .htaccess, то это минимум, который вам необходим:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    RewriteRule ^my-site\/(.*)\/ui\-([0-9]+)\/(.*) my-site/$1/ui/$3 [L]
</IfModule>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...