给博客添加刷新缓存按钮 发表于 2022-04-27 更新于 2022-04-27
字数总计 707 阅读时长 3分钟 阅读量
注意 本教程基于Butterfly
主题实现,如果读者使用的不是该主题,请根据自己情况修改代码。
修改SW 如果前面按照我的实现(《基于Butterfly的PWA适配》 )创建了sw.js
,那么完全按照我的内容走就可以了。如果你没有sw.js
或者没有使用我的sw.js
,那么请跳过这一步骤。
向sw.js
中添加如下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 self. addEventListener ( 'message' , function ( event ) { if ( event. data === 'refresh' ) { caches. open ( CACHE_NAME ) . then ( function ( cache ) { cache. keys ( ) . then ( function ( keys ) { for ( let key of keys) { const value = findCache ( key. url) if ( value == null || value. clean || ! dbAccess. check ( key. url) ) { cache. delete ( key) dbTime. delete ( key) } } event. source. postMessage ( 'success' ) } ) } ) } } )
上面这个代码用到的全局变量都是在另一个博文《基于Butterfly的PWA适配》 中使用的。
添加按钮 打开[butterfly]\layout\includes\rightside.pug
,修改以下内容(注意保持缩进):
1 2 3 4 5 6 7 8 9 10 11 when 'chat' if chat_btn button#chat_btn(type="button" title=_p("rightside.chat_btn")) i.fas.fa-sms when 'comment' if commentsJsLoad a#to_comment(href="#post-comment" title=_p("rightside.scroll_to_comment")) i.fas.fa-comments + when 'refresh' + button#refresh-cache(type="button" title='刷新缓存' onclick="refreshCache()") + i.fas.fa-refresh.fa-spin
1 2 3 4 5 #rightside - const { enable, hide, show } = theme.rightside_item_order - - const hideArray = enable ? hide && hide.split(',') : ['readmode','translate','darkmode','hideAside'] + - const hideArray = enable ? hide && hide.split(',') : ['readmode','translate','darkmode','hideAside', 'refresh'] - const showArray = enable ? show && show.split(',') : ['toc','chat','comment']
添加JS 新建:[butterfly]\source\js\custom\refresh.js
,写入以下内容:
location.reload(true)
相当于按Ctrl + F5
如果你按照我上面的内容修改了sw.js
:
1 2 3 4 5 6 7 8 9 10 11 12 13 function refreshCache ( ) { if ( 'serviceWorker' in window. navigator && navigator. serviceWorker. controller) { if ( confirm ( '是否确定刷新博文缓存' ) ) navigator. serviceWorker. controller. postMessage ( "refresh" ) } else if ( GLOBAL_CONFIG . Snackbar) { btf. snackbarShow ( 'ServiceWorker未激活' ) } else { alert ( 'ServiceWorker未激活' ) } } navigator. serviceWorker. addEventListener ( 'message' , event => { if ( event. data === 'success' ) location. reload ( true ) } )
如果你跳过了sw.js
的修改:
1 2 3 function refreshCache ( ) { if ( confirm ( '是否确定刷新博文缓存' ) ) location. reload ( true ) }
然后在配置文件中引入JS:
1 - <script async src="/js/custom/refresh.js"></script>
有无sw对比 如果你完全按照我的教程编写了sw.js
,那么刷新缓存按钮可以直接刷掉所有想刷掉的sw
缓存以及浏览器的本页缓存。如果你不需要刷新浏览器的本页缓存,那么可以把location.reload(true)
改为location.reload()
来改善性能。
如果你没有按照上面的教程修改sw.js
,那么刷新按钮将只能刷掉浏览器的本页缓存,即时你有sw.js
并且其会控制缓存,刷新按钮也无法刷新掉sw.js
控制的缓存。
给博客添加刷新缓存按钮 空 梦 | 山岳库博
更新于 2022-04-27
发布于 2022-04-27