当前位置:   article > 正文

微信小程序 web-view H5页面交互,不用点击返回按钮;页面间交互bindmessage、 postmessage、binderror、bindsucces。

bindmessage

问题/功能描述:微信小程序中应用web-view组建加载h5页面链接,在页面中需要点击某个按钮来通知小程序进行某种操作。

官方的bindmessage只有在某些特定场景才可以进行数据交互,存在交互短板,不符合我们的业务需求;

短板如下:网页向小程序 postMessage 时,会在特定时机(小程序后退、组件销毁、分享)触发并收到消息。e.detail = { data },data是多次 postMessage 的参数组成的数组)--- https://developers.weixin.qq.com/miniprogram/dev/component/web-view.html

经分析:

   1.在web-view加载网页时,加载失败触发binderror的监听方法,加载成功触发bindsuccess的监听防范,在这两个方法中可以拿到页面访问的链接。

   2.既然能拿到页面链接,可以在点击页面【按钮】时让页面跳转,在跳转地址后面添加【按钮标志或参数】,再通过小程序监听方法拿到参数进行业务处理。

   3.小程序处理完业务逻辑后,更新链接参数再给webview组建地址进行重新赋值,再次进行数据交互- - 闭环。

结果:数据交互通过页面跳转带参数,通过web-view的监听方法获取链接参数进行数据交互;

 

小程序监听代码:

  1. <!-- 初始页面A -->
  2. <view class="video_authpre">
  3. <view class="viewbg">
  4. <view class="view-t">
  5. <image class="head-scan" src="/images/videoauth/video-face.png"></image>
  6. <view class="pre-tip">tips1</view>
  7. <view class="pre-tip">tips2</view>
  8. </view>
  9. </view>
  10. <view class="scanpre" bindtap="beginAuth">确认</view>
  11. </view>
  12. <!-- H5页面加载 -->
  13. <view class="video_authpre" wx:if='{{showContractSign}}'>
  14. <view class="viewbgIng nobg">
  15. <view class="view-t nobg">
  16. <image class="contractimg" mode="aspectFit" src="/images/videoauth/readfile.png"></image>
  17. <view class="colorg">加载中...</view>
  18. </view>
  19. </view>
  20. <web-view class="web" bindload="loadSuccess" binderror="loadError"
  21. src="http://localhost/contractSign/contractSign.html" bindmessage='getpostMsg'></web-view>
  22. </view>
  1. //监听报错信息,根据带入的参数进行数据交互
  2. //分割的最后一个参数为交互标志,根据标志进行业务处理,也可以携带参数
  3. loadSuccess: function (e) {
  4. console.log('loadSuccess ------');
  5. console.log(e);
  6. console.log('loadSuccess ------');
  7. if(e.detail.src.indexOf('done') != -1){
  8. console.warn("loadSuccess 收到页面的按钮反馈:done");
  9. this.result(true);
  10. }
  11. if(e.detail.src.indexOf('cancel') != -1){
  12. console.warn("loadSuccess 收到页面的按钮反馈:cancel");
  13. this.result(false);
  14. }
  15. },
  16. loadError: function (e) {
  17. console.log('loadError ------');
  18. console.log(e);
  19. console.log('loadError ------');
  20. if(e.detail.src.indexOf('done') != -1){
  21. console.warn("loadError 收到页面的按钮反馈:done");
  22. this.result(true);
  23. }
  24. if(e.detail.src.indexOf('cancel') != -1){
  25. console.warn("loadError 收到页面的按钮反馈:cancel");
  26. this.result(false);
  27. }
  28. },
  29. /**
  30. * 显示web-view插件
  31. */
  32. beginAuth: function () {
  33. this.setData({showContractSign:true})
  34. return;
  35. },


H5页面代码:引入jssdk

  1. <!DOCTYPE html>
  2. <html id="html">
  3. <head>
  4. <title>文件标题</title>
  5. <meta name="viewport" content="width=device-width,user-scalable=no, initial-scale=1.0">
  6. <meta charset="utf-8">
  7. <style type="text/css">
  8. ::-webkit-scrollbar{width:0;display:none;background:none;}
  9. ::-webkit-scrollbar-thumb{width:0;display:none;}
  10. .wrap{ width: 100vw; height: 100vh; box-sizing: border-box; object-fit: cover;}
  11. body{width:100%;overflow-x:hidden; margin:0;}
  12. #outurl{
  13. width: 100%;
  14. height: calc(100vh - 21.3vw);
  15. position: absolute;
  16. left: 0;
  17. top: 0;
  18. bottom: 21.3vw;
  19. right: 0;
  20. }
  21. .operation{
  22. display: flex;;
  23. justify-content: space-between;
  24. margin: 0 12.5vw;
  25. position: fixed;
  26. left: 0;
  27. bottom:0;
  28. right: 0;
  29. height: 21.3vw;
  30. box-sizing: border-box;
  31. padding-top: 5.3vw;
  32. }
  33. .cancelbtn{
  34. opacity: 0.9;
  35. box-shadow: 2px 4px 16px 0 rgba(47,99,245,0.30);
  36. border-radius: 20px;
  37. width: 31vw;
  38. height: 10.5vw;
  39. line-height: 10.5vw;
  40. text-align: center;
  41. border: 1px solid rgba(32,125,240);
  42. color: rgba(32,125,240);
  43. }
  44. .signedbtn{
  45. opacity: 0.9;
  46. background-image: linear-gradient(270deg, rgba(34,143,242) 0%, #001EEE 100%);
  47. box-shadow: 2px 4px 16px 0 rgba(47,99,245,0.30);
  48. border-radius: 20px;
  49. width: 31vw;
  50. height: 10.5vw;
  51. line-height: 10.5vw;
  52. text-align: center;
  53. color: #FFFFFF;
  54. }
  55. </style>
  56. </head>
  57. <body id="body">
  58. <div class="wrap">
  59. <!-- iframe 为我方业务需要加载的某个外部链接 -->
  60. <iframe id="outurl" src=""></iframe>
  61. <div class="operation">
  62. <div class='cancelbtn' onclick="cancelClick()">
  63. 取消
  64. </div>
  65. <div class='signedbtn' onclick="doneClick()">
  66. 完成
  67. </div>
  68. </div>
  69. </div>
  70. </body>
  71. <script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.3.2.js"></script>
  72. <script type="text/javascript">
  73. function getQueryVariable(variable){
  74. var query = window.location.search.substring(1);
  75. var vars = query.split("&");
  76. for (var i=0;i<vars.length;i++) {
  77. var pair = vars[i].split("=");
  78. if(pair[0] == variable){return pair[1];}
  79. }
  80. return(false);
  81. }
  82. let pageUrl = window.location.href;
  83. let subPage = getQueryVariable('subpage');
  84. let subPageUrl = decodeURIComponent(subPage)
  85. document.getElementById("outurl").src = subPageUrl;
  86. let cancelIsTap = false;
  87. let sureIsTap = false;
  88. function cancelClick(e){
  89. if(cancelIsTap == false){
  90. cancelIsTap = true;
  91. setTimeout(function() {
  92. cancelIsTap = false;
  93. }, 300);
  94. //事件处理 begin
  95. wx.miniProgram.getEnv(function(res) {
  96. pageUrl += '&feedback=cancel'
  97. console.log(res) // true
  98. window.location.href = pageUrl;
  99. })
  100. //事件处理 end
  101. return;
  102. }
  103. }
  104. function doneClick(e){
  105. if(sureIsTap == false){
  106. sureIsTap = true;
  107. setTimeout(function() {
  108. sureIsTap = false;
  109. }, 300);
  110. //事件处理 begin
  111. wx.miniProgram.getEnv(function(res) {
  112. pageUrl += '&feedback=done'
  113. console.log(res) // true
  114. window.location.href = pageUrl;
  115. })
  116. //事件处理 end
  117. return;
  118. }
  119. }
  120. </script>
  121. </html>

交互演示:修仙页面为H5页面,只看交互即可~

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/123785
推荐阅读
相关标签
  

闽ICP备14008679号