微信小程序内嵌网页web-view

蹲街弑〆低调 提交于 2020-03-02 01:25:25

web-view 组件是一个可以用来承载网页的容器,会自动铺满整个小程序页面。个人类型与海外类型的小程序暂不支持使用。

客户端 6.7.2 版本开始,navigationStyle: custom<web-view> 组件无效

属性名 类型 默认值 说明
src String   webview 指向网页的链接。可打开关联的公众号的文章,其它网页需登录小程序管理后台配置业务域名。
bindmessage EventHandler   网页向小程序 postMessage 时,会在特定时机(小程序后退、组件销毁、分享)触发并收到消息。e.detail = { data }
bindload EventHandler   网页加载成功时候触发此事件。e.detail = { src }
binderror EventHandler   网页加载失败的时候触发此事件。e.detail = { src }

示例代码:

<!-- wxml -->
<!-- 指向微信公众平台首页的web-view -->
<web-view src="https://mp.weixin.qq.com/"></web-view>

相关接口 1

<web-view/>网页中可使用JSSDK 1.3.2提供的接口返回小程序页面。 支持的接口有:

接口名 说明 最低版本
wx.miniProgram.navigateTo 参数与小程序接口一致 1.6.4
wx.miniProgram.navigateBack 参数与小程序接口一致 1.6.4
wx.miniProgram.switchTab 参数与小程序接口一致 1.6.5
wx.miniProgram.reLaunch 参数与小程序接口一致 1.6.5
wx.miniProgram.redirectTo 参数与小程序接口一致 1.6.5
wx.miniProgram.postMessage 向小程序发送消息 1.7.1
wx.miniProgram.getEnv 获取当前环境 1.7.1

示例代码:

在开发者工具中预览效果

<!-- html -->
<script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.3.2.js"></script>

// javascript
wx.miniProgram.navigateTo({url: '/path/to/page'})
wx.miniProgram.postMessage({ data: 'foo' })
wx.miniProgram.postMessage({ data: {foo: 'bar'} })
wx.miniProgram.getEnv(function(res) { console.log(res.miniprogram) // true })

相关接口 2

<web-view/>网页中仅支持以下JSSDK接口

接口模块 接口说明 具体接口
判断客户端是否支持js   checkJSApi
图像接口 拍照或上传 chooseImage
  预览图片 previewImage
  上传图片 uploadImage
  下载图片 downloadImage
  获取本地图片 getLocalImgData
音频接口 开始录音 startRecord
  停止录音 stopRecord
  监听录音自动停止 onVoiceRecordEnd
  播放语音 playVoice
  暂停播放 pauseVoice
  停止播放 stopVoice
  监听语音播放完毕 onVoicePlayEnd
  上传接口 uploadVoice
  下载接口 downloadVoice
智能接口 识别音频 translateVoice
设备信息 获取网络状态 getNetworkType
地理位置 使用内置地图 getLocation
  获取地理位置 openLocation
摇一摇周边 开启ibeacon startSearchBeacons
  关闭ibeacon stopSearchBeacons
  监听ibeacon onSearchBeacons
微信扫一扫 调起微信扫一扫 scanQRCode
微信卡券 拉取使用卡券列表 chooseCard
  批量添加卡券接口 addCard
  查看微信卡包的卡券 openCard
长按识别 小程序圆形码

相关接口 3

用户分享时可获取当前<web-view/>的URL,即在onShareAppMessage回调中返回webViewUrl参数。

示例代码:

Page({
  onShareAppMessage(options) {
    console.log(options.webViewUrl)
  }
})

相关接口 4

在网页内可通过window.__wxjs_environment变量判断是否在小程序环境,建议在WeixinJSBridgeReady回调中使用,也可以使用JSSDK 1.3.2提供的getEnv接口。

示例代码:

// web-view下的页面内
function ready() {
  console.log(window.__wxjs_environment === 'miniprogram') // true
}
if (!window.WeixinJSBridge || !WeixinJSBridge.invoke) {
  document.addEventListener('WeixinJSBridgeReady', ready, false)
} else {
  ready()
}

// 或者
wx.miniProgram.getEnv(function(res) {
  console.log(res.miniprogram) // true
})

Bug & Tip

  1. 网页内iframe的域名也需要配置到域名白名单。
  2. 开发者工具上,可以在 <web-view/> 组件上通过右键 - 调试,打开 <web-view/> 组件的调试。
  3. 每个页面只能有一个<web-view/><web-view/>会自动铺满整个页面,并覆盖其他组件。
  4. <web-view/>网页与小程序之间不支持除JSSDK提供的接口之外的通信。
  5. 在iOS中,若存在JSSDK接口调用无响应的情况,可在<web-view/>的src后面加个#wechat_redirect解决。

 

常见错误:

  1. 打开的域名没有在小程序管理后台设置业务域名(注意是业务域名,不是服务器域名)

  2. 打开的页面必须为https服务

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

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

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

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

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

  8. 如果web-view使用了公众号授权的服务,开发者工具提示网页开发者的问题,请见:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1455784140

 

关于web-view的问题,大家可以集中在这个帖子留言,为了保证高效查问题,请提供以下信息:

  1. web-view的src地址

  2. 后台配置的业务域名是否设置成功

  3. 微信的版本

  4. 遇到问题的小程序APPID以及复现的微信号

  5. 出问题的错误提示信息是什么

  6. 后台设置失败问题,请提供小程序APPID以及遇到问题的时间点。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!