微信小程序中内嵌页面的后退操作

微信小程序中内嵌页面的后退操作

使用原生的微信顶部栏的后退按钮实现

要注意几点:
1.一级页面嵌入网页的话,没有后退按钮,点进去后再次点击网页内的链接,无法后退
2.>=二级页面才会有后退按钮,在>=二级页面中嵌入网页,点进去后再次点击网页内的链接,后退按钮会按照顺序依次返回,直到返回一级页面。
如果我们想要在一级页面中显示内嵌的网页并也想实现网页内再次点击还能依次后退该怎么办呢?
这里我们使用的方法是用一个中间页面A进行过度:
假设我们真正想要展示的内嵌网站的页面叫页面B,那么中间页面A相当于一个虚页面,先将入口放到中间页面A,此时页面A为一级页面,
然后在中间页面A里用wx.navigateTo跳到真正需要展示的页面B,此时页面B变成了二级页面
但是光这样还会出现一个问题,当返回到一级页面A时,页面A又会立刻跳转到页面B,变成了循环
因此还需要一个全局变量的标志位,并且在页面A中添加判断。

举个实际例子:

实现效果如图:

在这里插入图片描述

上图中底部使用的 小程序原生tabBar,因此有四个一级页面:“消费者指数”,“市场洞察”,“专家观点”,“联系我们”

假设“消费者指数”页面为首页,想要在“市场洞察”中内嵌外部网页链接,然后返回按钮最终返回到“消费者指数”首页:

假设“消费者指数”页面为页面X,中间页面为页面Y,“市场洞察”实际内嵌网页的页面为页面Z。

将中间页面Y作为“市场洞察”的入口文件一级页面

1.设置全局变量

以mpvue中TS语言为例:
src下的main.ts中

//main.ts
//...
//.....
Vue.config.productionTip = false;
const MyApp = require("./App.vue").default as IMpVue;
const app = new Vue(MyApp);
app.$mount();
//重点!!!在这里设置全局变量globalData,由于是TS,可能需要在微信的TS定义文件中getApp()中添加globalData的定义
//此时globalData 为全局变量
Vue.prototype.globalData = getApp().globalData;
2.设置全局变量初始状态

“消费者指数”页面X中设置标志位初始状态

 onShow() {   
  this.globalData.isWebView = false;    
}
3.设置全局变量改变状态

“市场洞察”页面Z中改变标志位状态,代表已访问过此页面

onShow() {
  this.globalData.isWebView = true;
}
4.判断全局变量状态

中间页面Y中判断:

onShow() {
  if (this.globalData.isWebView == false) {
    console.log("show");
    wx.navigateTo({
      url: "../“市场洞察”页面Z/main"
    });
  } else {
    console.log("hide");
    wx.reLaunch({
      url: "../“消费者指数”页面X/main"
    });
  }

这样的话就解决了无限循环跳转的问题了

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要在微信小程序入H5页面,并在H5页面接收数据并请求,您可以使用以下步骤: 1. 在微信小程序创建一个web-view组件,它允许您在小程序显示H5页面。可以使用以下代码创建web-view组件: ```html <web-view src="{{url}}" bindmessage="onMessage"></web-view> ``` 其,`src`属性用于指定要加载的H5页面的URL地址,`bindmessage`属性用于监听来自H5页面的消息。 2. 在H5页面,您可以使用`postMessage`方法将数据发送回小程序。例如,您可以使用以下代码将数据发送回小程序: ```javascript var data = {foo: 'bar'}; window.parent.postMessage(data, '*'); ``` 其,`data`是要发送的数据,`window.parent.postMessage`方法用于将数据发送回小程序。 3. 在微信小程序,您可以使用`onMessage`方法来监听来自H5页面的消息,并在接收到消息后执行必要的操作。例如,您可以使用以下代码来监听来自H5页面的消息: ```javascript onMessage: function(event) { var data = event.detail.data; // 处理接收到的数据 } ``` 其,`event.detail.data`表示从H5页面发送的数据。 4. 如果您需要在H5页面向服务器发送请求并获取响应,可以使用标准的AJAX请求。例如,您可以使用以下代码向服务器发送POST请求: ```javascript var xhr = new XMLHttpRequest(); xhr.open('POST', '/path/to/api'); xhr.setRequestHeader('Content-Type', 'application/json'); xhr.onreadystatechange = function() { if (xhr.readyState === 4) { if (xhr.status === 200) { var response = JSON.parse(xhr.responseText); // 处理响应数据 } else { console.error(xhr.statusText); } } }; xhr.send(JSON.stringify(data)); ``` 其,`/path/to/api`是您要访问的API的URL地址,`data`是您要发送的数据。在收到响应后,您可以使用`JSON.parse`方法将响应数据转换为JavaScript对象,并执行必要的操作。 ### 回答2: 微信小程序H5页面后,可以通过向H5页面传递数据和向服务器发送请求来实现数据的传递和处理。 首先,在微信小程序,我们可以使用web-view组件来内H5页面。使用该组件时,可以通过src属性指定H5页面的URL地址。在H5页面,可以通过window对象的location.search或者document.referrer来获取从小程序传递过来的数据。 其次,在H5页面可以使用Ajax等技术向服务器发送请求获取数据。可以使用XMLHttpRequest对象或者使用第三方库比如axios来实现。在发送请求时,需要注意跨域问题,需要在小程序后台配置服务器域名白名单,并在H5页面的响应头添加Access-Control-Allow-Origin字段。 在小程序传递数据给H5页面可以通过URL参数,如: ``` web-view src="/pages/index/index?param1=value1&param2=value2" ``` 在H5页面,可以通过window对象的location.search来获取URL参数,然后进行处理,如: ``` var params = location.search.slice(1).split("&"); var data = {}; params.forEach(function(item) { var arr = item.split("="); data[arr[0]] = arr[1]; }); console.log(data); ``` 在H5页面请求数据可以使用如下代码,以使用axios发送GET请求为例: ``` axios.get("http://example.com/api/data") .then(function(response) { console.log(response.data); }) .catch(function(error) { console.error(error); }); ``` 需要注意的是,在微信小程序使用H5页面时,需要通过合理的设计和安全措施来防止恶意代码的注入和数据的非法访问,确保小程序的数据安全和用户信息的保护。 ### 回答3: 微信小程序H5页面可以通过两种方式接受数据并发起请求。 一种方式是通过使用URL传参的形式将数据传递给H5页面,并在H5页面解析URL参数来获取数据。在小程序内H5页面时,可以通过`web-view`组件的`src`属性来指定H5页面的URL地址,可以在URL后面添加参数,如:`https://www.example.com/page?data=xxx`。在H5页面,可以通过获取`location.search`来获取URL的参数,再进行解析和使用。 另一种方式是通过JavaScript脚本在小程序和H5页面之间进行双向通信,实现数据的传递和请求。在小程序,可以通过`web-view`组件的`bindmessage`事件监听H5页面发送的消息,并通过`e.detail.data`获取传递的数据。H5页面可以通过`window.parent.postMessage`方法将数据发送给小程序,如:`window.parent.postMessage({data: 'xxx'}, '*')`。小程序页面收到消息后,可以根据需要进行处理,如发起请求等。 以上两种方式可以根据具体需求选择合适的方式来进行数据传递和请求,具体实现可以根据小程序和H5页面的开发文档进行操作

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值