Как программно очистить кэш браузера?
Я ищу способ программно очистить кэш браузера. Я делаю это, потому что приложение кэширует конфиденциальные данные, и я хотел бы удалить их, когда вы нажимаете "выйти". Это произойдет либо через сервер, либо через JavaScript. Конечно, использование программного обеспечения на внешнем/общедоступном компьютере по-прежнему не рекомендуется, поскольку есть больше опасностей, таких как регистраторы ключей, которые вы просто не можете победить на программном уровне.
10 ответов:
возможно, вы можете просто использовать jQuery для замены "мета-тега", который ссылается на состояние кэша с помощью обработчика событий / кнопки, а затем обновить, легко,
$('.button').click(function() { $.ajax({ url: "", context: document.body, success: function(s,x){ $('html[manifest=saveappoffline.appcache]').attr('content', ''); $(this).html(s); } }); });Примечание: это решение опирается на кэш приложений, реализованный как часть спецификации HTML 5. Он также требует настройки сервера для настройки манифеста кэша приложения. Он не описывает метод, с помощью которого можно очистить "традиционный" кэш браузера с помощью клиентского или серверного кода, который является почти невозможно сделать.
здесь не так браузер позволит вам очистить свой кэш. Это было бы огромной проблемой безопасности, если бы это было возможно. Это может быть очень легко злоупотреблять-в ту минуту, когда браузер поддерживает такую "функцию", я удалю ее с моего компьютера.
что ты можете do-это сказать ему, чтобы он не кэшировал вашу страницу, отправив соответствующие заголовки или используя эти мета-теги:
<meta http-equiv='cache-control' content='no-cache'> <meta http-equiv='expires' content='0'> <meta http-equiv='pragma' content='no-cache'>вы также можете рассмотреть возможность отключения автоматическое заполнение полей формы, хотя я боюсь, что есть стандартный способ сделать это (посмотреть здесь).
несмотря на это, я хотел бы отметить, что если вы работаете с конфиденциальными данными, вы должны использовать SSL. Если вы не используете SSL, любой человек с доступом к сети может нюхать сетевой трафик и легко видеть, что видит ваш пользователь.
использование SSL также делает некоторые браузеры не используйте кэширование, если явно не указано. Видеть этот вопрос.
использовать сам html.Есть один трюк, который можно использовать.Хитрость заключается в том, чтобы добавить параметр / строку к имени файла в теге сценария и изменить его при изменении файла.
<script src="myfile.js?version=1.0.0"></script>браузер интерпретирует всю строку как путь к файлу, хотя что происходит после "?- это параметры. Так что теперь происходит то, что в следующий раз, когда вы обновляете свой файл, просто измените номер в теге скрипта на своем веб-сайте (пример
<script src="myfile.js?version=1.0.1"></script>) и каждый браузер пользователи смотрите файл изменился и возьмите новую копию.
лучшая идея - сделать генерацию JS-файлов с именем + некоторый хэш с версией, если вам нужно очистить кэш, просто создайте новые файлы с новым хэшем, это вызовет браузер для загрузки новых файлов
на Chrome, вы должны быть в состоянии сделать это с помощью расширения бенчмаркинга. Вам нужно запустить chrome со следующими переключателями:
./chrome --enable-benchmarking --enable-net-benchmarkingв консоли Chrome теперь вы можете сделать следующее:
chrome.benchmarking.clearCache(); chrome.benchmarking.clearHostResolverCache(); chrome.benchmarking.clearPredictorCache(); chrome.benchmarking.closeConnections();Как вы можете сказать из команд выше, он не только очищает кэш браузера, но и очищает кэш DNS и закрывает сетевые подключения. Они отлично подходят, когда вы делаете бенчмаркинг времени загрузки страницы. Очевидно, вы не должны использовать их все, если не необходимо (например, clearCache () должно быть достаточно, если вам нужно очистить только кэш и не заботиться о кэше DNS и подключениях).
расположение.перезагрузка (true); будет трудно перезагрузить текущую страницу, игнорируя кэш.
кэш.удалить() может также использоваться для новых chrome, firefox и opera.
Первоначально я пробовал различные программные подходы в моем 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
//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 >
представить
.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//ui/ [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//ui/ [L] </IfModule>
теперь вы можете использовать кэш.удалить()
пример:
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.
Comments