• 下载
  • 社区

web-view H5 页面承载

版本要求:支付宝客户端 10.1.35 或更高版本。

web-view 组件用于承载 H5 网页,自动铺满整个小程序页面。

注意:

  • 此组件目前仅支持企业小程序,不支持个人小程序使用。
  • 每个页面只能有一个 web-view ,请不要渲染多个 web-view ,会自动铺满整个页面,并覆盖其它组件。
  • 调试请以真机效果为准。
  • web-view 不支持 pushWindow。
  • URL 传参中除 ASCLL 字母、数字、~!* ()'以外的字符(如中文字符),请使用 encodeURIComponent() 函数进行编码,及使用 decodeURIComponent() 函数进行解码。
  • web-view H5 不支持嵌套授权逻辑。
  • 常见问题 请见 web-view 常见问题

前提条件:

在使用该组件之前,请确保 H5 页面中所有的域名地址(含静态资源地址,例如图片、.js 文件地址等)已经加入到 web-view 的 H5 域名白名单内。如未添加,请参见 配置 H5 白名单流程 进行添加。

扫码体验

img.jpg

效果示例

webview.png

示例代码

<!-- API-DEMO page/component/webview/webview.axml -->
<view class="page">
  <web-view src="https://render.alipay.com/p/s/web-view/index" onMessage="onmessage"></web-view>
</view>
// API-DEMO page/component/webview/webview.js
Page({
  data: {},
   onShareAppMessage(options) {
    my.alert({content:JSON.stringify(options.webViewUrl)});
    return {
      title: '分享 web-View 组件',
      desc: 'View 组件很通用',
      path: 'page/component/component-pages/webview/baidu',
      'web-view': options.webViewUrl,
    };
  },
  onmessage(e){
    my.alert({
      content: '拿到数据'+JSON.stringify(e), // alert 框的标题
    });
  }
});

属性

属性 类型 默认值 描述 最低版本
src String - web-view 要渲染的 H5 网页 URL ,需要在如下路径中 支付宝小程序管理中心 > 设置 > 开发设置 >H5域名配置 进行 H5 域名白名单配置 -
onMessage EventHandle - 网页向小程序 postMessage 消息。e.detail = { data } -

可用 API

web-view 载入的 H5 页面可以使用手动引入 https://appx/web-view.min.js(此链接仅支持在支付宝客户端内访问),提供了相关的 API 供您使用(调试请以真机效果为准)。
说明:如需嵌入 H5 页面请使用表格中支持的 API,表格中如不支持请调用原生 js。

接口类别 接口名 说明
导航栏 my.navigateTo 保留当前页面,跳转到应用内的某个指定页面
导航栏 my.navigateBack 关闭当前页面,返回上一级或多级页面
导航栏 my.switchTab 跳转到指定 tabBar 页面,并关闭其他所有非 tabBar 页面
导航栏 my.reLaunch 关闭当前所有页面,跳转到应用内的某个指定页面
导航栏 my.redirectTo 关闭当前页面,跳转到应用内的某个指定页面
图片 my.chooseImage 拍照或从手机相册中选择图片(可将获取到的图片路径通过 my.postMessage() 将相关数据传递给小程序后进行图片上传)
图片 my.previewImage 预览图片
位置 my.getLocation 获取用户当前的地理位置信息
位置 my.openLocation 使用支付宝内置地图查看位置
交互反馈 my.alert 警告框
交互反馈 my.showLoading 显示加载提示
交互反馈 my.hideLoading 隐藏加载提示
缓存 my.setStorage 将数据存储在本地缓存中指定的 key 中,会覆盖掉原来该 key 对应的数据
缓存 my.getStorage 获取缓存数据
缓存 my.removeStorage 删除缓存数据
缓存 my.clearStorage 清除本地数据缓存
缓存 my.getStorageInfo 异步获取当前缓存的相关信息
网络状态 my.getNetworkType 获取当前网络状态
分享 my.startShare 分享当前页面,当执行my.startShare() 时会唤起当前小程序页面的分享功能
唤起支付 my.tradePay 唤起支付
向小程序发送消息 my.postMessage 向小程序发送消息,自定义一组或多组 key 、 value 数据,格式为 JSON ,如:my.postMessage({name:"测试web-view"})
监听小程序发过来的消息 my.onMessage 监听小程序发过来的消息, webview组件控制
获取当前环境 my.getEnv 获取当前环境

示例代码

web-view H5 页面代码:

<script type="text/javascript" src="https://appx/web-view.min.js"></script>
<!-- 如该 H5 页面需要同时在非支付宝客户端内使用,为避免该请求404,可参考以下写法 -->
<!-- 请尽量在 html 头部执行以下脚本 -->
<script>
  if (navigator.userAgent.indexOf('AlipayClient') > -1) {
    document.writeln('<script src="https://appx/web-view.min.js"' + '>' + '<' + '/' + 'script>');
  }

  my.navigateTo({url: '../get-user-info/get-user-info'});
  // 网页向小程序 postMessage 消息
  my.postMessage({name:"测试web-view"});
  // 接收来自小程序的消息。
  my.onMessage = function(e) {
    console.log(e); // {'sendToWebView': '1'}
  }
  // 判断是否运行在小程序环境里
  my.getEnv(function(res) {
    console.log(res.miniprogram) // true
  });
  my.startShare();
</script>

my.postMessage 信息发送后,小程序页面接收信息时,会执行 onMessage 配置的方法:

<!-- .axml -->
<view>
  <web-view id="web-view-1" src="..." onMessage="test"></web-view>
</view>
// 小程序页面对应的 page.js 声明 test 方法,
// 由于 page.axml 里的 web-view 组件设置了 onMessage="test",
// 当页面里执行完 my.postMessage 后,test 方法会被执行
Page({
  onLoad(e){
    this.webViewContext = my.createWebViewContext('web-view-1');    
  },
  test(e){
    my.alert({
      content:JSON.stringify(e.detail),
    });  
    this.webViewContext.postMessage({'sendToWebView': '1'});
  },
});

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

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