小程序嵌套H5

这篇具有很好参考价值的文章主要介绍了小程序嵌套H5。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在微信小程序中内嵌H5页面是一种常见的需求,因为H5页面具有灵活性和跨平台性,可以弥补小程序原生代码的不足。

微信小程序自带的 web-view 组件相当于 HTML页面中的 iframe ,方便我们在微信小程序中打开一个 H5 页面;从微信小程序基础库1.6.4开始,我们就可以在小程序内放置一个<web-view>组件来链接我们的HTML页面了。

web-view使用前提:业务域名

由于个人类型的小程序暂不支持使用。只有非个人类型小程序可以配置业务域名

1、扫码登录微信公众平台;

2、开发管理 —— 开发设置 —— 业务域名 进行添加、修改;

小程序嵌套H5,小程序

小程序嵌套H5,小程序

3、配置完业务域名后,还需要下载校验文件(步骤2中第四张图的红色框部分),并将校验文件放置在域名根目录下(让后端去操作)。这一步相当于是让对方授权你能打开他的网页,比如要在你的小程序中打开百度,就需要百度去把这个校验文件放到他的域名根目录下得到他的授权;

4、设置业务域名时,报检查校验怎见石板,可以参考业务域名设置--校验文件检查失败自查指引 微信开放社区进行自查。

web-view链接打不开问题
  • 打不开某个外部网页链接:

  • 检查是否配置了小程序的业务域名,注意外部网页内再次 iframe 内嵌的其他域名也需要配置

    • 检查是否为 https 协议,不支持http协议,不支持 IP 地址

    • 打不开公众号文章:检查小程序是否已关联该公众号

  • 外部网页链接、公众号文章链接在开发工具、体验版上可以打开,正式版上不行:

    • 检查开发工具上是否开启了 “ 不校验合法域名、web-view业务域名、TLS版本以及HTTPS证书 ” 选项,开发工具上开启这个选项,不用配置业务域名或关联小程序也能打开链接,在开发工具上将该选项关掉,也就打不开了,该选项位置如下图;体验版上能打开是因为打开了 “ 开发调试 ”,关闭开发调试后,同样也是打不开。

小程序嵌套H5,小程序

web-view的基本使用

官方web-view组件使用:web-view | 微信开放文档

每个页面只能有一个 web-view组件,并且 web-view组件将默认展示在最高层级

小程序嵌套H5,小程序

index.wxml

<view class="page-body">
    <web-view src="{{webUrl}}"></web-view>
</view>

index.js

data: {
    webUrl: app.globalData.BASE_URL + "contacts"
},
H5页面和小程序跳转及传参
web-view提供的跳转接口

小程序嵌套H5,小程序

跳转基本流程
  • 在小程序中新建一个web-view组件,指定URL为要嵌入的H5页面的链接。

  • 在H5页面中添加微信小程序JS SDK的引入,在H5页面中可以通过JS SDK调用小程序API。

  • 在小程序中设置跨域请求的安全域名,H5页面需要在此安全域名下。

  • 在需要向小程序传递参数的H5页面

H5 跳转回小程序

在内嵌网页中跳回小程序,需引入JS-SDK

//安装插件
npm i -S weixin-js-sdk 
//引入
import wx from 'weixin-js-sdk'

在需要返回小程序的H5页面使用下面代码:

wx.miniProgram.navigateTo({
  url: "/pages/index", //小程序地址
});

注意:

  • web-view 网页与小程序之间不支持除 JSSDK 提供的接口之外的通信;

  • 在 iOS 中,若存在JSSDK接口调用无响应的情况,可在 web-view 的 src 后面加个#wechat_redirect解决;

  • 避免在链接中带有中文字符,在 iOS 中会有打开白屏的问题,建议加一下 encodeURIComponent;

小程序和H5之间传参

小程序和H5之间互相跳转,如果需要传递参数的话可以通过 url 路径拼接的方式来传递参数

小程序向H5传参:

  • 微信小程序向H5传参

   /**
   * 页面的初始数据
   */
  data: {
    webUrl: app.globalData.BASE_URL +'eventDetail'
  },  
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    let queryString = 'id=1&name=anna'
    this.setData({
      webUrl: this.data.webUrl + '?' + queryString
    })
  },
  • H5接收参数

created() {
    this.detailData = this.$route.query
},

H5向小程序传参:

  • H5向小程序传递参数

linkPath(route) {
        if (route.query) {
          url = url + '?params=' + JSON.stringify(route.query)
        }
        wx.miniProgram.redirectTo({
          url, //小程序地址
        })
}
  • 小程序接收参数

  var util = require('../../../utils/util')
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    const params  = JSON.parse( options.params )
    let queryString = util.queryUrl(params)
  },

utile.js

const queryUrl = params => {
  let queryString = Object.keys(params)
  .map(function (key) {
    return key + '=' + encodeURIComponent(params[key])
  })
  .join('&')

  return queryString
}

const formatNumber = n => {
  n = n.toString()
  return n[1] ? n : `0${n}`
}

module.exports = {
  formatTime,
  queryUrl
}
JSON数据处理

在传递参数过程中,使用了json处理参数可能会报 Unexpected token % in JSON at position 0这类报错问题,问题原因就是里面有特殊符号,需要对json数据做处理

小程序嵌套H5,小程序

转换string类型时 用encodeURIComponent编码包一下
url = url + '?params=' + encodeURIComponent(JSON.stringify(route.query))
转换成原来的类型decodeURIComponent先解码回来再转换回来
const params  = JSON.parse( decodeURIComponent( options.params ) )
自定义导航名

web-view页面的标题取决于H5嵌入页面的title标题,该组件不支持自定义组件导航栏

可以通过修改title标题修改导航栏标题

mounted() {
    document.title = '通讯录'
},

注意:在微信开发者工具上可能会出现仅在第一次进入h5生效,进入h5后再改title的话并不能修改成功,由于微信开发者工具上不稳定,在上传后真机是可以的。

判断是否是微信环境

当有差异化功能时就可以通过微信sdk的接口进行当前是否小程序/公众号的判断,然后进行webview新页面的开发。

微信小程序提供了两种判断方法

  • wx.miniProgram.getEnv:获取当前环境

    / 判断是否是小程序端
    isMiniPrograms() {
      var isMiniprogram = false;
      // 判断是否是小程序打开
      wx.miniProgram.getEnv(res => {
        console.log(res.miniprogram)
        if (res.miniprogram) {
          //在小程序中
          isMiniprogram = true;
        }
      });
      return isMiniprogram;
    }
  • 在网页内可通过window.__wxjs_environment变量判断是否在小程序环境,建议在WeixinJSBridgeReady回调中使用

const isWx =
      window.__wxjs_environment === 'miniprogram' || /miniProgram/i.test(navigator.userAgent.toLowerCase())
相关注意事项
  • 打开的域名没有在小程序管理后台设置业务域名(注意是业务域名,不是服务器域名)

  • 打开的页面必须为https服务

  • 打开的页面302过去的地址也必须设置过业务域名

  • web-view空白问题,请升级微信客户端到 6.5.16

  • 页面可以包含iframe,但是iframe的地址必须为业务域名

  • web-view不支持支付能力,web-view的API能力见web-view的文档说明

  • 开发者自己检查自己的https服务是否正常,测试方法:普通浏览器打开对应的地址

  • 如果web-view使用了公众号授权的服务,开发者工具提示网页开发者的问题,请见:概述 | 微信开放文档文章来源地址https://www.toymoban.com/news/detail-776029.html

到了这里,关于小程序嵌套H5的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 小程序web-view中嵌套H5如何跳转其他小程序

    首先web-view中H5是无法跳转到其他小程序的 只能通过H5跳转回小程序,再让小程序跳转到其他小程序 H5跳转回小程序使用wx.miniProgram.navigateTo() 小程序跳转小程序使用wx.navigateToMiniProgram(),官方文档有示例,用法很简单,只需要传入appid,还有path(可选参数,不是必须的,不传则默认

    2024年02月08日
    浏览(43)
  • 微信小程序嵌套的H5使用小程序分享(分享微信好友或朋友圈)

    嵌套在微信小程序中的H5想要使用小程序自带分享功能,分享H5的页面给微信好友或朋友圈 H5中可使用wx.miniProgram.postMessage向小程序的webview发送消息,会触发组件的message事件,在小程序webview页面onShareAppMessage,onShareTimeline中进行使用。

    2024年02月13日
    浏览(70)
  • 小程序使用webview嵌套H5中使用iframe真机无法跳转 wx.miniProgram.navigateTo等失效问题

    小程序使用webview嵌套H5真机无法跳转 wx.miniProgram.getEnv、wx.miniProgram.navigateTo等失效无响应问题分享 原因分析:由于页面使用了iframe导致在子页面中真机无法准确获取页面运行环境(开发者工具中无影响); 解决方案:在调用方法前加一个 parent. 在父页面中调用方法即可正常运

    2024年02月03日
    浏览(59)
  • H5与unity通信(只针对unity嵌套H5)

    说到H5与unity通信这里,主要分两种情况,一个是H5调用unity的方法,另一个是unity调用H5的方法,通过互相调用方法来达到互相传参的通信效果。 H5调用unity,主要通过unity向H5抛出方法名,H5通过window去调用unity方法,例如unity抛出了tabFun的方法, H5这里需要这么调用 这样,H5向

    2024年04月14日
    浏览(32)
  • h5|web页面嵌套iframe传参给cocosCreator

    目录 一、快速浏览 二、详细实现与项目代码 三、安全性评估——iframe 实现效果: 一、快速浏览 在h5页面中,使用JavaScript获取需要传递的参数,如下: 使用iframe嵌入cocosCreator游戏页面,同时将参数作为url的query string传递,如下: 在cocosCreator游戏页面中,使用JavaScript获取ur

    2024年02月02日
    浏览(40)
  • h5开发网站-使用jquery来实现二层嵌套的左侧列表,点击后显示右侧内容的效果

    使用jquery来实现二层嵌套的左侧列表,点击后显示右侧内容的效果。 为一级列表项和二级子列表项分别添加了点击事件处理程序。 当一级列表项被点击时,使用.slideToggle()方法展开或收起对应的二级子列表项。 当二级子列表项被点击时,使用event.stopPropagation()方法阻止事件冒

    2024年02月09日
    浏览(42)
  • 跨平台应用开发进阶(五十)uni-app ios web-view嵌套H5项目白屏问题分析及解决

    应用 uni-app 框架开发好APP上架使用过程中,发现应用经过长时间由后台切换至前台时,通过 webview 方式嵌套的H5页面发生白屏现象。 任何手机设备上,当手机内存不足时,os都会回收资源。一般是先回收后台打开的资源。如果当前应用占用的资源过高,当前应用也有可能崩溃

    2024年02月14日
    浏览(55)
  • 微信小程序for循环嵌套

    wx:for-item=“pro” pro 自定义循环体参数

    2024年04月26日
    浏览(38)
  • Java程序设计入门教程-- 嵌套循环

            在解决某些复杂问题时,若在for、while或do-while循环语句的循环体内再包含一个循环语句,就形成了嵌套循环(nested loop)。         这3种循环语句之间可相互嵌套,构成多层的嵌套逻辑结构,外层的循环称为外循环,内层的循环称为内循环。         同嵌套

    2024年02月07日
    浏览(51)
  • Python 程序设计入门(022)—— 循环结构程序设计(3):循环的嵌套

    在编程时,循环语句的嵌套是很常见的,循环嵌套是指在一个循环语句中又包含另一个循环语句。例如:在 for 循环中嵌入另一个 for 循环或 while 循环,在 while 循环中嵌入另一个 while 循环或 for 循环等。 1、使用双层 for 循环 代码如下: 代码如下: 1、使用 for 循环中嵌套 w

    2024年02月12日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包