微信小程序webview清除缓存、微信公众号h5清除缓存、页面白屏、空白、不刷新问题

2023-10-27

 一、缓存带来的问题和原因

        我们在发布新版本的时候,在打开微信小程序webview嵌套的h5页面或微信公众号h5页面时,常常会发现页面还是上个版本的旧页面或者打开直接空白 白屏了,那么为什么会存在这个问题呢?

        原因是微信浏览器为了提高性能,自带缓存功能,缓存了html文件,比如页面 https://www.xxx.com/abc.html,虽然这个页面有改动,但是页面路径还是同一个,还是https://www.xxx.com/abc.html,缓存就会生效,还是会请求到旧的资源;也因为有时手动清除了缓存,缓存资源不存在会造成空白的现象。

        如果不处理,缓存第二天或过几个小时后就自动清除,这个功能有好有坏,但缓存问题确实对发布新版本造成很大的困扰,总不能让用户手动清除缓存吧,而且清除缓存后还不一定成功有效。

 二、怎么解决

        在这之前我们肯定已经做了尝试,比如服务器 cache-control 强缓存协商缓存,还有加时间戳等等,发布后还是没有用。在本文中会采用修改请求路径的方式做测试。

例如下面常规的清除缓存的方式,参考我的另外一篇文章

h5、微信浏览器、微信公众号清理缓存的常用方法_飞歌Fly的博客-CSDN博客h5浏览器特别是微信公众号存在缓存的问题,让我们在测试、产品、用户面前彻底丢了面子,他们会问。为什么会有缓存?别人的产品可以做到,为什么我们的不可以?下面提供几种方案可以尝试处理h5浏览器缓存的问题。一、普通h5浏览器清理缓存方式。1、在index.html文件中加入清理缓存的meta标签(有些浏览器有用,有些浏览器然并卵)<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" /&https://blog.csdn.net/qq_35430000/article/details/111572760

hash路由和history路由的区别:

hash 路由:hash 就是指 url 尾巴后的 # 号以及后面的字符,监听 url 中 hash 的变化,然后渲染不同的内容,这种路由不向服务器发送请求,不需要服务端的支持;
history 路由:监听 url 中的路径变化,需要客户端和服务端共同的支持;

        vue项目默认采用的就是hash路由,带#号的路由,例如https://www.xxx.com/policy/#/abc.vue,#后面无论改变什么内容都不会向服务器发送请求,也不会清除缓存。所以hash路由模式后面加版本号还是时间戳都不会有太大作用,例如https://www.xxx.com/policy/#/abc.vue?version=1.0&t=Date.now()。

另外采用history模式加版本号和时间戳重新发起请求清理缓存应该是可行的,因为url访问路径已经改变,这个我没有具体尝试,如果有效果就不需要下面的步骤了。history模式需要nginx加一些处理,要不然刷新会404。

三、具体做法

重点:既然#符号后面内容改变无效,那能不能在 #符号前面加版本号改变请求路径呢?

举例:原访问路径是  https://www.xxx.com/policy/#/abc.vue,policy是项目名称,前端项目放在服务器data/hdwork-h5目录下。

在#前面加版本号就变成:https://www.xxx.com/policy/123/#/abc.vue,123是版本号的举例,这个可以自己定,是个数字就可以,这种做法简单,只需要nginx再多加一个匹配数字的配置就可以。以下是nginx项目的配置参考,具体以自己项目定义。这里只给出了匹配/policy/\d+ 匹配数字的案例,不加数字的/policy 就是原逻辑。

这样 加版本号https://www.xxx.com/policy/{版本号}/#/abc.vue 和 不加版本号https://www.xxx.com/policy/#/abc.vue,这两种方式都是可以正常访问的

原理就是 当我们请求带版本号的请求路径https://www.xxx.com/policy/123/#/abc.vue时,会自动重写成 正常的访问路径https://www.xxx.com/policy/#/abc.vue,这样就达到了修改请求路径从而让微信浏览器以为这是一个新的路径,就不会有缓存的情况。

四、版本号怎么定

        版本号只要是数字就可以,因为nginx 正则就是 /d匹配数字,需要其他正则规则自己配置。版本号的产生可以在每次前端构建发版的时候定义一个全局变量 version然后获取;也可以和后端约定,通过接口的形式获取版本号,每次发新版本,version都+1更新,版本号只要和上次就版本不一致就可以。建议还是通过接口形式获取版本号,这样比较好维护也好变更,拿到版本号后在原请求路径上追加版本号。

https://www.xxx.com/policy/{版本号}/#/abc.vue

五、加版本号的一些问题

        有一些微信小程序需要分享二维码或者分享给第三方的链接。因为二维码都比较固定,不会经常变化。所以对于分享出去的链接最好先把版本号去掉,等扫码进入或者链接进入时,再请求接口把版本号拼接上。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

微信小程序webview清除缓存、微信公众号h5清除缓存、页面白屏、空白、不刷新问题 的相关文章

  • Webview 不显示带有颜色的文本

    在我的应用程序中 我在 webview 中显示一些 Html 内容 String webViewConent this is some span style color 2ecc71 sample span string webView l
  • Webview没有清除缓存

    为了清除 WebView 的缓存 我使用了 webview getSettings setAppCacheEnabled false webview clearCache true webview loadUrl about blank w
  • 分享失败,请重试(仅限whatsapp)

    当我将内容分享到 Whatsapp 时 它返回到分享页面 并显示 Toast 通知 分享失败 请重试 my code if url startsWith share Uri requestUrl Uri parse url String p
  • 无法解析符号“javafx.scene.web”

    使用Intellij 2021 3 2 JavaFX版本 11 0 2 1 我正在尝试将 JavaFX WebView 添加到我的应用程序中 我的导入语句无法编译 import javafx scene web 编译错误 java 找不到符
  • webView.loadUrl 显示空白屏幕

    我必须加载这些通过使用下面的代码 但最终显示空白屏幕作为输出 您可以检查url代码之间的链接位于last line WebPagerLoader java public class WebPageLoader extends Activit
  • 如何在再次恢复应用程序时不重新加载webview?

    我做了一个网络视图应用程序 一切都运转良好 但是 当用户点击后退按钮并打开 恢复 应用程序时 它会重新加载 Web 视图 我该如何预防呢 MainActivity java public class MainActivity extends
  • 无法从 com.android.aaptcompiler.ParsedResource@ef79973 提取资源

    无法从 com android aaptcompiler ParsedResource ef79973 提取资源 无法从 com android aaptcompiler ParsedResource 4c95ce87 提取资源 C Use
  • Android PhoneGap 插件,UI 选项卡栏,调整 WebView 大小

    我正在创建一个美味的 PhoneGap 插件 希望一旦它能被打开 准备好了 插件基本完成了 我只需要一个漂亮的用户界面 相互作用 简而言之 我想创建一个 本机 android 工具栏组件 如果您实现 PhoneGap UIControls
  • 为什么我的字体大小在 android webview 对象中看起来比在 android 浏览器中查看时大得多?

    我正在尝试制作一个小型 Android 应用程序 它除了在 webview 对象而不是浏览中显示网站之外什么也不做 到目前为止它加载了目标网页 但文本和图像大小都比查看页面时大得多在实际设备浏览器中 在浏览器中 页面看起来正确 但在我的应用
  • 在 WebView 中注入 Javascript 桥

    我想从 Android 网页中提取一些内容 我知道有一些库可以解析 HTML 但我想也许我可以稍微作弊一下 这就是我正在做的 使用应用程序上下文以编程方式创建 WebView 因此不必在 UI 中显示它 加载网页 附上JS接口 注入一些 J
  • 删除Android webview左右边距

    我正在开发一个 webview 应用程序 我的问题是左右两侧有空白 我是初学者 我不知道如何删除它们 请帮忙 注意 请在您的答案中具体说明 例如 将此代码添加到名为布局的 java 框中的全屏内容中 预先非常感谢 这是代码 1 布局 全屏活
  • 在 Safari 中快速打开链接

    我目前正在我的应用程序中打开链接WebView 但我正在寻找一个打开链接的选项Safari反而 它不是 融入 Swift 但你可以使用标准UIKit方法来做到这一点 看看 UIApplication 的openUrl https devel
  • 将 javascript 注入 WebChromeClient

    我知道 你可以将 javascript 注入到 Android WebView 中 我已经这么做了 但是 我加载了一个 html5 javascript Web 应用程序 不是我自己的 所以我无权访问代码 并且我需要注入额外的 javasc
  • Android 4.4 在 WebView 的 onReceivedError 中给出 ERR_CACHE_MISS 错误

    我的布局中有一个网络视图 默认情况下 会在其中打开一个搜索表单 在搜索时 搜索表单下方会出现一个列表部分 如果单击列表中的任何链接 则会打开详细信息页面 现在我想控制网络视图的后退导航 我将这段代码放在 Activity 中 Overrid
  • 如何在新标签 android webview 中打开链接? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我已经使用 webview 创建了一个 android 应用程序来显示我的网站 我什至想添加在新选项卡中打开链接的功能 但我找不到任何
  • 有人可以给出一个 android 中 webview 实现的确切例子吗

    嗨 我正在使用开发 Android 应用程序WebView执行 我跟着官方安卓教程 http developer android com resources tutorials views hello webview html 在 Ecli
  • phonegap:基于 cookie 的身份验证 (PHP) 不起作用 [webview]

    我正在开发一个移动网络应用程序 使用 sencha touch HTML5 和 Phonegap 作为包装器 我正在使用 PHP 身份验证 Cookie 和 ajax 请求 在 safari 或 chrome 上一切正常 但在使用phone
  • 在android中的webview中运行时更改URL

    我创建了一个小程序 可以在 webview 中加载特定网站 我想密切关注 URL 如果 URL 包含 xxx 单词 那么它应该导航到另一个页面 例如 如果我设置 www example com 我现在可以导航到 www example co
  • 如何使用phonegap在iOS应用程序中防止键盘推送webview

    当屏幕底部的输入字段获得焦点时 键盘会向上推我的网络视图 并且页面的上部不再可见 我想防止键盘推高网络视图 有人有主意吗 对焦 设置window scrollTo 0 0 这可以防止键盘完全推高 webview input on focus
  • Webview 电子邮件链接 (mailto)

    我有一个视图并查看该网站有用于发送电子邮件的 malito 代码 当我打开链接时 会出现错误 我希望当我打开链接时打开 Gmail 应用程序或其他电子邮件应用程序 感谢所有帮助者 public class teacher extends A

随机推荐

  • asp.net core ABP模板本地化设置

    ABP的语言本地化设置非常方便 甚至地区图标ABP框架都已经有了 先看看结果吧 英文的界面 中文的界面 配置流程如下 首先在Localization目录下新建一个对应的json文件 里面存放对应变量的本地化字符串 命名规则就是 应用名 本地
  • ThreadLocal 原理 总结

    1 首先看了 Java并发编程 深入剖析ThreadLocal 这篇文章 这篇文章首先用用一个数据库连接的例子 如多个线程同时进行连接和关闭数据库操作 有可能会导致某个线程刚打开的数据库连接操作 被另一个线程打开的数据库关闭操作给关闭了 然
  • Hyperledger Fabric区块链浏览器搭建

    最近在用Hyperledger Fabric平台做一个项目 要使用区块链浏览器 以下是我的基础环境的情况以及搭建过程 版本 Ubuntu 22 04 1 LTS 运行内存 8 0 GiB 处理器 Intel Core i7 8700 CPU
  • “对象创建”模式——构建器

    动机 在软件系统中 有时候面临着 一个复杂对象 的创建工作 其通常由各个部分的子对象用一定的算法构成 由于需求的变化 这个复杂对象的各个部分经常面临着剧烈的变化 但是将它们组合在一起的算法却相对稳定 如何应对这种变化 如何提供一种 封装机制
  • SqlServer的for xml path函数

    这两天在处理一个字符串拼接遇到一个问题 老师姓名 学科 张老师 语文 张老师 数学 张老师 英语 李老师 体育 李老师 音乐 需要将上面的记录转换成 老师姓名 学科 张老师 语文 数学 英语 李老师 体育 音乐 想了一些办法来处理 都感觉不
  • zabbix 之脚本实现企业微信报警及报警升级

    文章目录 一 微信报警 一 对被检测主机创建指定监控项和触发器 二 注册企业微信 三 zabbix服务段配置 四 web监控界面媒介告警配置 五 验证 二 报警升级 一 微信报警 目的 被监控主机test01的mysql服务不可用时立即发送
  • kaggle操作入门

    pip install kaggle kaggle gt Account gt API gt Create New API Token 下载得到 kaggle json 文件 Linux 存放到 home xxx kaggle 中 xxx表
  • 【软考】-高项-范围管理-重要知识点思维导图

    范围管理 文章目录 范围管理 产品范围 项目范围 范围蔓延 镀金 范围潜变 范围蔓延 范围管理计划 含义 包含内容 需求管理内容 需求管理计划 含义 包含内容 作用 可指导 收集需求 工具与技术 访谈 麦肯锡方法 含义 分类 结构化 非结构
  • C++中运算重载和定时器函数的实现

    一 概念 1 在operate函数内实现你想实现的具体的运算操作 这样一来不单单只可以对普通的数进行加减操作 可以对类进行加减操作 在operate函数内实现的加减的具体实现过程就可以 2 运算符重载 就是对已有的运算符重新进行定义 赋予其
  • shell脚本系列:10、快速上手bash脚本:简单有效的shell脚本示例

    shell脚本系列 10 快速上手bash脚本 简单有效的shell脚本示例 文章目录 shell脚本系列 10 快速上手bash脚本 简单有效的shell脚本示例 前言 1 hello world 2 使用echo打印 3 使用注释 4
  • python利用matplotlib进行可视化

    利用matplotlib进行可视化 1 Matplotlib 基本介绍 Matplotlib 是一个在 python 下实现的类 matlab 的纯 python 的第三方库 旨在用 python实现matlab 的功能 是python下最
  • Flutter Json对象和数组解析成实体类

    1 解析json对象 准备一个json 对象数据 String json res true age 12 Name 张三 使用JSON to Dart 工具自动生成实体类 也可以自己手动写 工具地址 JSON to Dart 将代码复制到类
  • TCP标志位 FIN和RST的区别

    大家都知道TCP释放连接需要四次挥手 主动释放端会发送FIN包 并且因为TCP是双工的 关闭一个方向上的数据流 从而TCP连接处于半关闭状态 这也是为什么需要 四次 挥手的原因 以上所述四次挥手是一种 有序释放 即 标志位为FIN的TCP报
  • 数据结构---二叉树路径问题

    二叉树路径问题 二叉树所有路径 分析 JAVA实现 力扣提交 找到一个和为sum的到达叶子节点的路径 分析 JAVA实现 力扣提交 求路径 中间一段 C 实现 打印根节点到任意节点的路径 JAVA实现 二叉树所有路径 257二叉树所有路径
  • STM32G473VET6 FlashDB数据库移植(裸机、片内Flash)

    STM32G473VET6 FlashDB数据库移植 裸机 片内Flash 此文档也适用于STM32G070 源码下载 此处使用FlashDB官方最新源码 FlashDB 一款支持 KV 数据和时序数据的超轻量级数据库 gitee com
  • Java 实现连接sql server 2000(JDBC数据库访问例子)

    刘金龙 04041222 ljlsunny vip sina com 第一种 通过ODBC连接数据库 JAVA语言的跨平台的工作能力 Write Once Run Anywhere 优秀的图像处理能力 我相信现在没有那种语言可以超过JAVA
  • vim+taglist+ctags+cscope+自动补齐

    下载地址 http download csdn net detail shichaog 8676365 vim命令录制于回放 script t 2 gt time log a vim hacking taglist txt scriptre
  • 【数据结构】

    博客新人 希望大家一起加油进步 乾坤未定 你我皆黑马 目录 1 搜索树 Tree 1 1 概念 1 2 操作 查找 1 3 操作 插入 1 4 操作 删除 难点 1 5 性能分析 2 搜索 2 1 概念及场景 2 2 模型 3 Map的使用
  • 物联网LoRa系列-22:LoRa终端--射频芯片SX1261 SX1262的LoRa专用调制解调器与配置

    目录结构 1 SX1261 2功能模块 2 调制技术的基本原理 3 LoRa调制解调的介绍 4 LoRa调制解调的寄存器设置 1 SX1261 2功能模块 MCU与SX1261 2物理上通过两组接口进行通信 1 SPI总线 2 GPIO中断
  • 微信小程序webview清除缓存、微信公众号h5清除缓存、页面白屏、空白、不刷新问题

    一 缓存带来的问题和原因 我们在发布新版本的时候 在打开微信小程序webview嵌套的h5页面或微信公众号h5页面时 常常会发现页面还是上个版本的旧页面或者打开直接空白 白屏了 那么为什么会存在这个问题呢 原因是微信浏览器为了提高性能 自带