微信小程序页面数量限制问题

article/2025/10/15 22:36:20

今天记录一下微信小程序关于页面栈不够用的解决方法,这个方法我是从小程序开发书中习得

1.问题

首先微信小程序中页面栈最多十层,也就意味着如果使用wx.navigateTo(保留当前页面,跳转到应用内的某个页面)方法,最多也就开启十层页面,如果在继续往后开会提示报错

其次是微信小程序官方文档建议我们不要尝试修改页面栈,会导致路由以及页面状态错误。
微信小程序官方文档

2.分析

首先微信小程序的跳转方法有
1.wx.navigateTo(Object object) 保留当前页面,跳转到应用内的某个页面。但是不能跳到 tabbar 页面。
2.wx.navigateBack(Object object) 关闭当前页面,返回上一页面或多级页面。可通过 getCurrentPages 获取当前的页面栈,决定需要返回几层。
3.wx.redirectTo(Object object) 关闭当前页面,跳转到应用内的某个页面。但是不允许跳转到 tabbar 页面。
因为我们无法修改页面栈,所以这边的解决思路是自定义一个页面栈数组来记录,再通过封装上述微信小程序的跳转方法,实现十层以上的页面跳转

3.解决方法

1.自定义页面栈
在app.js中创建pageList数组,保存页面的url属性。

// app.js
App({onLaunch() {},globalData: {pageList: ['/pages/index/index']}
})

2.封装wx.navigateTo
首先是 navigateTo的跳转逻辑,根据当前小程序的Page是否超过最大数目限制。调用不同的API跳转到新的页面。
在这里插入图片描述
下面是代码实现

const MAX_PAGE_SIZE = 10function navigateTo(pageUrl) {// 如page列表已到达上限, 将页面push到app.pageList中, 当前页面redirectTo到新页面const pageSize = getCurrentPages().lengthconsole.log(pageSize)if (pageSize < MAX_PAGE_SIZE) {wx.navigateTo({url: pageUrl})} else {wx.redirectTo({url: pageUrl})}getApp().globalData.pageList.push(pageUrl)console.log(getApp().globalData.pageList)
}

3.封装wx.navigateBack
接下来实现 wx.navigateBack,同样先使用流程图厘清思路。当 getCurrentPage().lengtl小于自定义的 Page 栈长度时,说明小程序默认的页面数目已不够使用,因此需要跳转的上一页数据需要从自定义的 Page 中获取。
在这里插入图片描述
下面是代码实现

function navigateBack() {// 如果page stack中页面数小于app.pageList中数目 => 将app.pageList中页面pop出去, 当前页面redirect到pop出来的urlconsole.log(getCurrentPages().length)console.log(getApp().globalData.pageList.length)if (getCurrentPages().length < getApp().globalData.pageList.length) {const pageList = getApp().globalData.pageListpageList.pop()const url = pageList[pageList.length - 1]wx.redirectTo({url: url})} else {// 如果两个数目一致, app.pageList pop, 当前页面navigateBackgetApp().globalData.pageList.pop();wx.navigateBack()}
}

4.导出
最后将 navigateTo和navigateBack函数通过 module.exports 导出即可。
至此,实现了这两个工具函数。在使用这两个工具函数时,只需要将之前调用wx.navigateTo和wx.navigateBack 的地方改为调用这两个函数,便可实现页面无限跳转的效果。

4.存在的问题

1.wx.redirectTo还没有封装,如果小程序需要这种方式会打破原有页面栈的数据
2.页面超过十层的返回中,里面的页面之前的数据会被清除

以上的问题还需要后期在进行研究,研究结果会同步更新到此篇文档


http://chatgpt.dhexx.cn/article/agyDxowa.shtml

相关文章

微信小程序获取头像昵称,限制头像大小

把用户的头像上传&#xff0c;限制在2M以内 代码 that.onChooseAvatar (e) > {console.log(onChooseAvatar2, e);const avatarUrl e.target.avatarUrl;let FileSystemManager wx.getFileSystemManager()FileSystemManager.getFileInfo({"filePath": avatarUr…

linux怎么限制文件大小,Linux文件系统文件大小限制

去阿里面试,被问到了Linux文件系统中文件大小的限制,当时就无语了。学操作系统时这些都是现算的,回来赶紧查一下。 以下为红帽ext3文件系统所支持的max file size和max filesystem size: ext3文件系统最大支持块数是2的32次方。块的大小可变,直接影响了文件系统的大小和文…

小程序包大小超过限制

uniapp&微信小程序主包/分包大小超过限制 一、开启分包1.在pages.json文件中配置分包2.在manifest.json文件中配置一下分包优化 二、以压缩方式运行1.在pages.json文件的顶部配置一条运行脚本(不清楚实际有没有生效)2.找到package.json文件 三、一些小建议1.一些图片文档之…

微信小程序文件大小限制

项目场景&#xff1a; 今天接着学习微信小程序&#xff0c;因为导入到项目的图片稍微多了一点&#xff0c;导致微信小程序无法编译&#xff0c;弹出以下错误。 经查找原因后才发现&#xff0c;原来微信小程序对每个小程序有大小限制&#xff0c;最多2M&#xff0c;进行分包后最…

socket中的函数遇见EINTR的处理

转载 &#xff1a; https://blog.csdn.net/benkaoya/article/details/17262053 http://blog.chinaunix.net/uid-21501855-id-4490453.html 这几天&#xff0c;写服务器代码过程当中&#xff0c;遇见EINRT信号的问题&#xff0c;我是借鉴 《unp 》&#xff0c;采用continue或者…

系统调用中断(EINTR)与SIGCHLD信号的处理

一、被中断的系统调用(EINTR)的理解 1. 慢系统调用是&#xff1f;2. 慢系统调用的类别3. EINTR产生的原因5. 一般处理方法 二、SIGCHLD信号的处理 1. SIGCHLD信号的产生2. SIGCHLD信号的处理3. 不处理SIGCHLD的后果 三、示例代码 一、被中断的系统调用(EINTR)的理解 1. 慢…

StringUtils 工具

<dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId></dependency>实验室&#xff1a; 常用方法&#xff1a; StringUtils.truncate("abcdefg", 7);StringUtils.wrapIfMissing("ab&…

StringUtils

今天我来谈一下Java里面一个工具类StringUtils&#xff0c;其实在Java里面一般把工具类写成静态的&#xff0c;这样是为了在使用的时候好调用。但是StringUtils这个类在Java API文档是没有的&#xff0c;所以必须要去倒StringUtils所属于的jar包。而StringUtils所属于的jar包是…

使用Python websockets搭建互联网服务器

在上一篇文章中实现局域网的通信&#xff0c;使用websockets,python作服务端&#xff0c;unity作客服端完成网络通信 这次准备实现互联网上的通信。 1.整个云服务器 要实现互联网通信&#xff0c;简单的方法就是先准备一个云服务器&#xff0c;这里我直接使用了阿里云服务器。…

【ZED2-3】python同时实现websockets与flask

上篇博客【ZED-2】基于WebSockets库&#xff0c;通过多线程方式推送数据流_WXG1011的博客-CSDN博客采用多线程方式&#xff0c;基于websockets库实现数据流的推送&#xff0c;这篇博客主要实现将前端&#xff08;nx板&#xff09;代码移植到flask框架中&#xff0c;通过http方式…

【burpsuite安全练兵场-客户端16】测试WebSockets安全漏洞-3个实验(全)

前言&#xff1a; 介绍&#xff1a; 博主&#xff1a;网络安全领域狂热爱好者&#xff08;承诺在CSDN永久无偿分享文章&#xff09;。 殊荣&#xff1a;CSDN网络安全领域优质创作者&#xff0c;2022年双十一业务安全保卫战-某厂第一名&#xff0c;某厂特邀数字业务安全研究员&…

在python中使用websockets

WebSocket (WebSocket) Websocket is a communications protocol, providing full-duplex bi-directional communication over a single TCP connection. Websocket是一种通信协议,可通过单个TCP连接提供全双工双向通信。 To understand Websockets, first, we have to have …

django3 websockets

一、概述 现在Django 3.0附带了对ASGI的支持&#xff0c;将Websockets添加到Django应用中不需要任何额外的依赖关系。 在本文中&#xff0c;您将学习如何通过扩展默认的ASGI应用程序来使用Django处理Websocket。 我们将介绍如何在示例ASGI应用程序中处理Websocket连接&#xff…

websockets_WebSockets简介

websockets WebSockets are an alternative to HTTP communication in Web Applications. WebSocket是Web应用程序中HTTP通信的替代方法。 They offer a long lived, bidirectional communication channel between client and server. 它们在客户端和服务器之间提供了长期的双…

尝试Python的websockets库的最基础功能

目标 尝试最简单的代码创建一个服务器并在客户端收发信息。 主要参考的是官方文档的首页&#xff1a;https://websockets.readthedocs.io/ &#xff08;还需要 asyncio 库的一些知识&#xff0c;可见之前的博客 翻译《使用asyncio的一个指南》作者&#xff1a;Andrew Crozier…

python使用websockets库

python使用websockets库 serve:在server端使用&#xff0c;等待客户端的连接。如果连接成功&#xff0c;返回一个websocket。 connect: 在client端使用&#xff0c;用于建立连接。 send:发送数据 recv:接收数据 close:关闭连接 服务端 #!/usr/bin/python3 # 主要功能&am…

什么是WebSockets!?

到目前为止&#xff0c;我们已经深入到实时世界&#xff0c;因为许多应用程序使用实时数据。 现在正是以技术立场解释所有导致这一点的事件的时候了。 所以&#xff0c;这里...... 目前&#xff0c;应用程序正在从利用数据库中的陈旧数据或在实际事件之后的实时体验中事…

WebSockets介绍

Web sockets定义为在servers和clients之间的双向连接。意味着servers和clients可以同时交流并发送数据。这种协议是从底层就是双工连接。Web sockets技术上得到了质的飞跃。 握手是一个过程&#xff0c;确保server与client同步。握手是Web Socket protocol的基础概念。 下面的图…

websockets_将WebSockets与Node.js结合使用

websockets WebSockets are an alternative to HTTP communication in Web Applications. WebSocket是Web应用程序中HTTP通信的替代方法。 They offer a long lived, bidirectional communication channel between client and server. 它们在客户端和服务器之间提供了长期的双…

各大公司数据结构与算法面试题解答(一)

还有一年就要找工作了&#xff0c;从现在开始找些公司的数据结构和算法的题来做一做&#xff0c;不定时贴出笔试面试题代码。 1.创新工场&#xff1a; 求一个数组的最长递减子序列比如{9&#xff0c;4&#xff0c;3&#xff0c;2&#xff0c;5&#xff0c;4&#xff0c;3&…