首页 > 其他分享 >解决webview缓存问题

解决webview缓存问题

时间:2024-08-18 16:17:10浏览次数:12  
标签:index 缓存 no Cache html 解决 webview

解决webview缓存问题

前言
项目是通过web-view内嵌在小程序里的vue单页应用.然而前几天发现明明发布了代码,在小程序入口进去看到的还是旧页面,尝试了各种操作:

手动退出小程序,再次进入;

删除 发现-小程序,重新进入;

关闭微信,杀掉进程,重新进入

修改 Nginx 关于 Cache-Control 的配置;

用 debugx5.qq.com 手动清除安卓微信浏览器缓存;

iOS 利用微信自带清除缓存功能。


不管怎么操作,依然显示的是旧页面!!!

 

单页面应用的缓存方向主要是两个(主要也是上图中两种缓存)

  • 入口index.html的缓存
  • 打包后的资源文件的缓存

之前所了解到的解决缓存的方法

  • index.html的head部分添加meta标签
  • < meta
    http-equiv=“Cache-control”
    content=“no-store,no-cache”
    />
    < meta http-equiv=“Pragma” content=“no-cache” />
    < meta http-equiv=“Expires” content=“0” />
    • < webview url=“后面参数带时间戳”></ webview>

    这两种方式都试过,都不太行,页面还是有缓存,后面看到一个大佬的文章,感觉好像很可行的样子,就试了一下,果然可以

    最终解决方案

    先总体说下解决方案

解决入口文件index.html缓存(服务器响应增加请求头Cache-Control,本项目采用Nginx部署,就直接在Nginx配置文件添加了–add_header Cache-Control “no-store, no-cache”
这样每次加载项目地时候都会不走缓存)
解决资源缓存问题(资源加载主要是webpack打包后端 dist文件,这里调整项目配置文件,增加hash:true属性,给每次打包后的文件添加hash标识符)

 

1.针对url地址没刷新的问题,可以在webview组件的src里面添加一个时间戳.

src = `https://XXX.com?timestamp=${new Date().getTime()}`
<web-view src='{{src}}'></web-view>

不要在onload中设置url,在onshow中设置 url

 

2. 在index.html的head头部添加不缓存的配置

<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />

 

 

nginx 设置不进行缓存

基于nginx静态文件服务器设置如下:

location /hhhh/ {
root /home;
#index index.html index.htm
try_files $uri /h5/index.html;
if ($request_filename ~* .*\.(?:htm|html)$)
{
add_header Cache-Control "private, no-store, no-cache, must-revalidate, proxy-revalidate";
}
if ($request_filename ~* .*\.(?:js|css)$)
{
expires 7d;
}
if ($request_filename ~* .*\.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm)$)
{
expires 7d;
}
}

 

location / { expires 1h; root /home/html; index index.html index.htm; ## html不缓存 if ($request_filename ~* .*\.(htm|html)$){ add_header Cache-Control "no-store"; } }

 

标签:index,缓存,no,Cache,html,解决,webview
From: https://www.cnblogs.com/Fooo/p/18365744

相关文章

  • fpga图像处理实战-图像缓存(FIFO)
    FPGA实现`timescale1ns/1ps////Company://Engineer:////CreateDate:2024/08/1813:47:22//DesignName://ModuleName:line_buffer//ProjectName://TargetDevices://ToolVersions://Description:////Dependencies:////Revision......
  • Android 13.0 recovery页面旋转180度问题的解决方案
    1.前言在13.0的系统rom定制化开发工作中,在系统中recovery的页面也是相关重要的一部分,在系统recoveryota升级等功能,都是需要recovery功能的,在某些产品定制化中在recovery的时候,发现居然旋转了180度,接下来分析下recovery关于屏幕显示方向的相关源码,来修改这个功能2.recovery......
  • CentOS 7.9 运行某些软件时缺少GLIBCXX_3.4.21、GLIBC_2.28解决办法
    dotnet:/lib64/libstdc++.so.6:version`GLIBCXX_3.4.20'notfound(requiredbydotnet)dotnet:/lib64/libstdc++.so.6:version`GLIBCXX_3.4.21'notfound(requiredbydotnet)  这可能是因为CentOS版本太低或者缺少libstdc++.so.6 版本 GLIBCXX_3.4.20 和 GLIB......
  • 高性能内存对象缓存Memcached原理与部署
    案例概述Memcached概述一套开源的高性能分布式内存对象缓存系统所有的数据都存储在内存中支持任意存储类型的数据提高网站的访问速度数据存储方式与数据过期方式数据存储方式:SlabAllocation按组分配内存,每次分配一个Slab,相当于一个大小为1M的页,然后再1M的空间里根......
  • pve 8.2.2 解决unsupported Ubuntu version '24.04'
    解决unsupportedUbuntuversion'24.04'问题描述:我在重装pve8.2.2恢复我的容器和虚拟机的时候,发现24.04的容器恢复时出现了如下错误:TASKERROR:unabletorestoreCT104-unsupportedUbuntuversion'24.04'在pve的论坛可以看到这篇文章:Ubuntu24.04-unsupportedUbunt......
  • 【解决方案】HarmonyOS图片添加水印
     实现思路:从相册中算选择图片,将图片展示到UI界面,利用核心方法drawImage将要添加的水印画到图片上,然后将图片保存。1、从相册中选取图片,添加水印,并返回添加水印后的图片保存路径asyncpickerAcvtor(waterStr:string[]){//实例化选择参数对象constoptions=ne......
  • 关于如何解决IDEA中同一个src下多个类中之一运行时自动报错其他类中的问题导致想要运
    关于如何解决IDEA中同一个src下多个类中之一运行时自动报错其他类中的问题导致想要运行的类无法正常运行的问题的解决思路WrongFirst:我准备了一个正常类BG和一个有错误的类HelloWorld,来看看会发生什么。WrongSecond:不出意外的报错了,这似乎和IDEA的默认设置有关。SolveFi......
  • 【解决方案】harmonyOS 图片压缩
    图片压缩在应用开发中是一个非常常见的需求,特别是在处理用户上传图片时,需要上传指定大小以内的图片。目前图片压缩支持jpeg、webp、png格式。本例中以jpeg图片为例介绍如何通过packing和scale实现图片压缩到目标大小以内使用说明进入页面,输入图片压缩目标大小,点击“图片压缩......
  • ansible 开启facts_cache缓存
    目录1.常见的缓存插件及其存储位置2.如何查询缓存的变量总结通过facts_cache缓存的变量通常存储在由Ansible配置文件中指定的位置,具体位置取决于你使用的缓存插件。下面是几个常见的缓存插件和它们的存储方式,以及如何查询这些缓存变量。1.常见的缓存插件及其存储位置j......
  • 013、Vue3+TypeScript基础,computed计算属性的使用,结果会被缓存
    01、App.vue代码如下:<template><divclass="app"><h2>{{title}}</h2><!--使用了ref来获取子组件的属性--><Person/></div></template><scriptlang="ts"setupname="App"......