小程序内嵌H5页面监听小程序的返回事件

因为业务上有需求,在开发小程序的时候有些页面要使用web-view组件嵌套H5页面

有个页面内有个表单,在表单内容还为填写完成的时候,监听用户点击左上角返回事件,弹出一个提示框,因为H5页面在小程序中的层级很高,所以弹出提示框只能在H5页面内完成,因此要在H5页面内检测小程序的返回事件,其实也就是监听url地址的改变事件

所以在H5页面刚载入的时候,要往window的history对象中加入一条历史记录,可用以下函数完成

const pushHistory = (str = 'title', url = '#') => {
    let state = {
      title: str,
      url: url,
    };
    window.history.pushState(state, state.title, state.url);
  };

这个函数可以往history对象中添加一条历史记录

所以在页面刚载入的时候调用这个函数以添加一条历史记录

pushHistory(document.title, location.href);

并且在页面刚载入的时候要给window添加一个popstate页面url改变事件

window.addEventListener('popstate', async function(e) {
    // 为了避免只调用一次,再次调用一次
    pushHistory(document.title, location.href);

    // 加入业务逻辑
    if(xxx) {
        // 调用微信的返回事件(前提要引入微信的SDK)
        wx.miniProgram.navigateBack();
    } else {
        // 取消返回,阻止默认返回行为
        history.pushState(null, null, location.href);
    }
})

这时候去小程序模拟器运行一下就完成了。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 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
发出的红包

打赏作者

孙大大啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值