前言:博客或者论坛上面,还有自习亲身经历,发现微信小程序的webview组件的页面缓存问题相当严重,对开发H5的小童鞋来说应该困扰了不少。很多小童鞋硬是抓破脑袋也没有办法解决这个问题,那我们今天就来探讨下这个问题。

使用实例:

<web-view src="https://www.baidu.com"></web-view>

上面实例就是微信小程序简单的web-view使用展示。

很多童鞋应该都会遇到这样一个问题,为什么我的h5页面已经更新到线上了,但是在微信小程序的web-view里面却展示的是上一个h5版本的内容,有些甚至会出现白屏的情况。

这个主要是基于我们现在前端大环境下,很多都是使用vue或者其他的单页面框架。就拿vue来说,vue默认打包下的路由的模式是hash模式,也就是url默认就带着#号的。所以很可能就会出现这样的情况是这样的

<web-view src="https://www.xxx.com/#/"></web-view>

这时候会有很多手机就会出现当h5的代码更新了v1.1的代码,但是他们的微信小程序的web-view里面展示的还是v1.0的,会很难受,然后就各种贴吧,论坛发文章寻求帮助。但是很多人都会回复说配置url版本号或者再url后面拼接时间戳标识,还有更离谱的会出现建议每次更新h5代码的时间修改项目的文件夹名称,想想是不是有点离谱了。但是按照他们的做法然后拼接版本号或者时间戳啥的,有些网友会回复缓存问题可以解决了啊,但是也有很多人会回复没有用啊。这时候开始疯狂抓狂了。

<web-view src="https://www.xxx.com/#/?v=1.1"></web-view>
<web-view src="https://www.xxx.com/#/a?v=1.1"></web-view>
<web-view src="https://www.xxx.com/#/a/b?v=1.1"></web-view>
<web-view src="https://www.xxx.com/#/a/b?a=b&v=1.1"></web-view>

有可能你们的路径会是上面这样子的了。版本号我也加了啊,为什么没有效呢?正常来说我们比如更新css文件或者js文件在url后面拼接上版本号去区分就可以解决的啊,为什么在这里会不生效啊。

答案:

因为vue的router默认的模式是"hash",就是带#号的这种模式的,但是我们也可以删除#号的,在vue里面配置mode:“history”,也就是h5的histor模式,但是会有些童鞋会出现打包后出现白页面或者文件加载地址不对的问题,会出现各种坑,但是这些坑可能你都可以在论坛或者贴吧找到对应解决的办法的。普片都会说是需要配合nginx等服务器配置的。在这里我可以告诉你,其实可以不修改服务器配置去解决这个问题,vue本身打包的时候就可以解决这个问题的。这个问题在后面的文章里面我会仔细讲解,在这里我就先埋个伏笔好了,就不做过多的详细解释了。在这里我可以告诉你们,很多时候还是需要自己去尝试,自己在本地搭建一台nginx服务器去测试,项目的各种文件嵌套关系,对于打包有没有什么影响。

上面的web-view后面加的版本号是对于web-view的浏览器来说是他并不会重新加载页面的,就算变更了hash后面的版本号,他也只会增加一条历史记录,并不会重新加载页面,所以说,坑就坑在这个位置了,所以这时候我们只要把#号删除就可以解决为啥有些人加了版本号就会出现缓存,有些人不会出现这个问题了。

最后修改完的地址应该就是这样的

<web-view src="https://www.xxx.com?v=1.1"></web-view>
<web-view src="https://www.xxx.com/a?v=1.1"></web-view>
<web-view src="https://www.xxx.com/a/b?v=1.1"></web-view>
<web-view src="https://www.xxx.com/a/b?a=b&v=1.1"></web-view>

这样问题就可以轻松解决了。

 

微信小程序内置组件web-view的缓存问题探讨的更多相关文章

  1. 小程序内置组件swiper,circular(衔接)使用小技巧

    swiper,关于滑块的一些效果无缝,断点,视差等等...我想这里就不用做太多的赘述,这里给大家分享一下实战项目中使用circular(衔接)的一点小特性.小技巧,当然你也可以理解为遇到了一个小坑,因 ...

  2. 微信小程序把玩(八)view组件

    原文:微信小程序把玩(八)view组件 刚看到这个效果的时候还真是和ReactNative的效果一致,属性也基本的一样. view这个组件就是一个视图组件使用起来非常简单. 主要属性: flex-di ...

  3. 原创:WeZRender:微信小程序Canvas增强组件

    WeZRender是一个微信小程序Canvas增强组件,基于HTML5 Canvas类库ZRender. 使用 WXML: <canvas style="width: 375px; h ...

  4. 微信小程序内嵌业务域名内的网页

    微信小程序在2017年11月左右开放了内嵌网页的功能,即新组件<web-view>.官方文档链接:https://mp.weixin.qq.com/debug/wxadoc/dev/com ...

  5. 微信小程序中悬浮窗功能的实现(主要探讨和解决在原生组件上的拖动)

    问题场景 所谓悬浮窗就是图中微信图标的按钮,采用fixed定位,可拖动和点击. 这算是一个比较常见的实现场景了. 为什么要用cover-view做悬浮窗?原生组件出来背锅了~ 最初我做悬浮窗用的不是c ...

  6. 微信小程序之swiper组件高度自适应

    微信小程序之swiper组件高度自适应 要求: (顶部广告栏 ) 改变swiper组件的固定高度,使之随内部每张图片的高度做自适应 原理: 图片加载完之后,获取图片的原始宽高,根据宽高比,计算出适应后 ...

  7. 微信小程序中的组件使用1

    不管是vue还是react中,都在强调组件思想,同样,在微信小程序中也是使用组件思想来实现页面复用的,下面就简单介绍一下微信小程序中的组件思想. 组件定义与使用 要使用组件,首先需要有组件页面和使用组 ...

  8. 微信小程序基于swiper组件的tab切换

    代码地址如下:http://www.demodashi.com/demo/14010.html 一.前期准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.co ...

  9. 微信小程序内嵌网页能力开放 小程序支持内嵌网页文档说明

    为了方便开发者灵活配置微信小程序,张小龙现在开放了小程序的内嵌网页功能,这是一个非常大的惊喜啊,以后意味着你只要开放一个手机端网站,就可以制作一个小程序了哦.操作方法1.开发者登录微信小程序后台,选择 ...

随机推荐

  1. Kafka 入门(二)--数据日志、副本机制和消费策略

    一.Kafka 数据日志 1.主题 Topic Topic 是逻辑概念. 主题类似于分类,也可以理解为一个消息的集合.每一条发送到 Kafka 的消息都会带上一个主题信息,表明属于哪个主题. Kafk ...

  2. Mybatis(三)动态sql语句

    动态sql语句操作 1.MyBatis中#{ }和${ }的区别 在 mapper 中定义的参数传到 xml 中之后,在查询之前 mybatis 会对其进行动态解析.mybatis 为我们提供了两种支 ...

  3. 前端学习(十六):JavaScript运算

    进击のpython ***** 前端学习--JavaScript运算 在这一节之前,应该做到的是对上一节的数据类型的相关方法都敲一遍,加深印象 这部分的知识的特点就是碎而且杂,所以一定要多练~练习起来 ...

  4. 一个使用android相机的例子,二维码必须用相机

    https://blog.csdn.net/feiduclear_up/article/details/51968975

  5. text输入框

    https://blog.csdn.net/renhong20121314/article/details/51906555

  6. java基础(一)注释

    注释的三方方式: 1.多行注释 /* 多行注释01 多行注释02 多行注释03 */

  7. Day15_redis安装及配置

    学于黑马和传智播客联合做的教学项目 感谢 黑马官网 传智播客官网 微信搜索"艺术行者",关注并回复关键词"乐优商城"获取视频和教程资料! b站在线视频 redi ...

  8. 国内安装Homebrew

    原文链接更详细 命令 $ /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew. ...

  9. Python 变量类型及变量赋值

    在 Python 中,变量不一定占用内存变量.变量就像是对某一处内存的引用,可以通过变量访问到其所指向的内存中的值,并且可以让变量指向其他的内存.在 Python 中,变量不需要声明,但是使用变量之前 ...

  10. Pandas 复习

    1.导包 import pandas as pd 2.数据读取,文件在该代码文件夹内 food_info = pd.read_csv('food_info.csv') 3.查看类型 food_info ...