web-view 网页容器

解释:web-view 组件是一个可以用来承载网页的容器,会自动铺满整个智能小程序页面。

属性说明

属性名类型默认值必填说明最低版本
srcStringwebview 指向网页的链接-
bindmessageEventHandler网页向小程序 postMessage 时,会在特定时机(小程序后退、组件销毁、分享)触发并收到消息。e.detail = { data }1.12.0低版本请做兼容性处理

示例

在开发者工具中预览效果

扫码体验

web-view 网页容器 - 图1请使用百度APP扫码

代码示例1 :

在开发者工具中预览效果

  1. <view>
  2. <web-view src="{{src}}"></web-view>
  3. </view>
  1. Page({
  2. data: {
  3. src: 'https://smartprogram.baidu.com'
  4. },
  5. //接收H5页传过来的参数
  6. onLoad(options) {
  7. console.log(options.webViewUrl);
  8. }
  9. });

代码示例2 - 在特定时机接受到H5传递参数的函数 :

在开发者工具中预览效果

  1. <view>
  2. <web-view src="{{src}}"></web-view>
  3. </view>
  1. Page({
  2. data: {
  3. src: 'https://smartprogram.baidu.com'
  4. },
  5. //小程序后退、组件销毁、分享时,由此函数来接收H5页传过来的参数
  6. postMessage(options) {
  7. console.log(options);
  8. }
  9. });

代码示例3 - 如何判断 H5 页面是否在小程序 web-view 打开 :

在开发者工具中预览效果

  1. let UA = window.navigator.userAgent;
  2. var regex = /swan\//;
  3. console.log( regex.test(UA) );// 若为true,则是在小程序的web-view中打开

代码示例4 - 原生页面与H5页面之间的跳转刷新:

在开发者工具中预览效果

  • 在 detail文件中
  1. <web-view src="{{url}}"></web-view>
  1. Page({
  2. data: {
  3. src: ''
  4. },
  5. //接收H5页传过来的参数
  6. onLoad(options) {
  7. this.setData({'src': options.webViewUrl})
  8. },
  9. onShow(){
  10. this.onLoad()
  11. }
  12. });
  • 在 index 文件中
  1. Page({
  2. data: { },
  3. navigateTo(e) {
  4. swan.navigateTo({
  5. url: "/detail/detail?webViewUrl=https://smartprogram.baidu.com&Math.radom()"
  6. });
  7. }
  8. });

相关接口介绍

相关接口1

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

旧版本 swan.xxxx,已更新为 swan.webView.xxxx。

接口名说明
swan.webView.navigateTo参数与智能小程序接口一致
swan.webView.navigateBack参数与智能小程序接口一致
swan.webView.switchTab参数与智能小程序接口一致
swan.webView.reLaunch参数与智能小程序接口一致
swan.webView.redirectTo参数与智能小程序接口一致
swan.webView.getEnv获取当前环境
swan.webView.postMessage向小程序发送消息

代码示例

  1. <!-- html -->
  2. <script type="text/javascript" src="https://b.bdstatic.com/searchbox/icms/searchbox/js/swan-2.0.20.js"></script>
  1. // javascript
  2. swan.webView.navigateTo({url: '/pages/detail/index'});
  3. swan.webView.postMessage({data: 'foo'})
  4. swan.webView.postMessage({data: {foo: 'bar'} })
  5. swan.webView.getEnv(function(res) {console.log(res.smartprogram) // true })

相关接口2

web-view 网页中支持的接口有:

接口模块接口说明具体接口备注
设备拨打电话swan.makePhoneCall
开放接口打开小程序swan.navigateToSmartProgram2.0.18版本开始,支持使用envVersion打开不同版本的小程序
开放接口登录swan.login
剪贴板设置剪贴板swan.setClipboardData
设备获取网络类型swan.getNetworkType
媒体预览图片swan.previewImage
开放接口分享swan.openShare需传入当前要分享的小程序的appKey
地理位置使用内置地图打开地点swan.openLocation
地理位置获取地理位置swan.getLocation
图像接口拍照或上传swan.chooseImage

相关接口3

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

代码示例:

  1. Page({
  2. onShareAppMessage(options) {
  3. console.log(options.webViewUrl);
  4. }
  5. })

使用 web-view 打开限定域名内的网页

进入智能小程序开发者平台,单击“设置->开发设置”,即可在业务域名中下载、配置校验文件并配置业务域名。

web-view 网页容器 - 图2

web-view 网页容器 - 图3

web-view 网页容器 - 图4

Bug & Tip

  • Tip:网页内 iframe 的域名也需要配置到域名白名单。
  • Tip:每个页面只能有一个 <web-view/>,<web-view/> 会自动铺满整个页面,并覆盖其他组件。
  • Tip:网页与智能小程序之间不支持除 JSSDK 提供的接口之外的通信。
  • Tip:避免在链接中带有中文字符,在 iOS 中会有打开白屏的问题,建议加一下 encodeURIComponent。
  • Tip:如果使用了 JSSDK 提供的接口,需要引入 swanjs
  • Tip:H5 运行时,通过 window.navigator.userAgent 获取浏览器 userAgent。当 userAgent 字符串中包含小程序标识:‘swan/’时,则说明当前环境为小程序 web-view。