钉钉小程序web-view内嵌H5页面并实现通信

目录
  • 前言
  • 1.引入页面
  • 2.在H5页面向钉钉发送消息
  • 3.在钉钉页面向H5发送消息,继而实现双向通信
  • 4.注意 内容调试方式
  • 5.附双向通信全部代码

前言

今天探讨个不太常见的需求,公司需要在钉钉小程序内进行文件的上传,意图打造一个小型云盘,考虑到钉钉的上传大小等有诸多限制,以及数据的安全性,决定在钉钉内使用web-view嵌套H5上传页面,并且在完成上传动作后,需要返回小程序,并执行其他操作。

1.引入页面

在管理端新建页面,同时在钉钉页面使用web-view引入,需要后端配合传入合适的token。

  • 钉钉页面引入
<template>
	<view class="">
            <web-view id="web-view-1" :src="`http://10.10.5.231:9529/myNetwork?x-token=${token}`"></web-view>
	</view>
</template>

2.在H5页面向钉钉发送消息

H5页面使用dd.postMessage()进行消息发送,并使用 dd.navigateTo()进行页面的跳转。

<template>
  <div>
   <el-button @click="handleToDT" >返回并发送消息</el-button>
  </div>
</template>
<script>
export default {
  data() {
    return {
    }
  },
  created() {
    var userAgent = navigator.userAgent
    if (userAgent.indexOf('AlipayClient') > -1) {
      // 支付宝小程序的 JS-SDK 防止 404 需要动态加载,如果不需要兼容支付宝小程序,则无需引用此 JS 文件。
      document.writeln('<script src="https://appx/web-view.min.js"' + '>' + '<' + '/' + 'script>')
    },
      methods: {
        handleToDT() {
              // 网页向小程序 postMessage 消息
              dd.postMessage({ name: '测试web-view' })
              setTimeout(()=>{
                dd.navigateTo({ url: '/pages/index/myNetwork/index' })
              },500)
        },
    }
  },
  </script>

钉钉页面使用@message进行消息的接受,但很坑的是,文档上接收方法为onMessage,但uniapp中需要改为@message才能接收到消息。

<template>
	<view class="">
		<web-view id="web-view-1" :src="`http://10.10.5.231:9529/myNetwork?x-token=${token}`" @message="test"></web-view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				webViewContext: '',
				token: uni.getStorageSync('x-token')
			}
		},
		onLoad(e){

		  },
		methods: {
			test(e){
				console.log(e)
			}
		},

	}
</script>

<style>
</style>

3.在钉钉页面向H5发送消息,继而实现双向通信

钉钉页面创建实例,并调用this.webViewContext.postMessage()方法发送消息

<template>
	<view class="">
		<web-view id="web-view-1" :src="`http://10.10.5.231:9529/myNetwork?x-token=${token}`" @message="test"></web-view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				webViewContext: '',
				token: uni.getStorageSync('x-token')
			}
		},
		onLoad(e){
		    this.webViewContext = dd.createWebViewContext('web-view-1');
		  },
		methods: {
			test(e){
				this.webViewContext.postMessage({'sendToWebView': '1'});
			}
		},

	}
</script>

<style>
</style>

H5页面在mounted中使用dd.onMessage接收消息

  mounted() {
    // 接收来自小程序的消息。
    dd.onMessage = function(e) {
      console.log(e); //{'sendToWebView': '1'}
    }
  },

4.注意 内容调试方式

钉钉页面在控制台查看数据即可 H5数据调试控制台开启方式

5.附双向通信全部代码

钉钉页面(即uniapp编写页面)

<template>
	<view class="">
		<web-view id="web-view-1" :src="`http://10.10.5.231:9529/myNetwork?x-token=${token}`" @message="test"></web-view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				webViewContext: '',
				token: uni.getStorageSync('x-token')
			}
		},
		onLoad(e){
		    this.webViewContext = dd.createWebViewContext('web-view-1');
		  },
		methods: {
			test(e){
				console.log(e)
				this.webViewContext.postMessage({'sendToWebView': '1'});
			}
		},

	}
</script>

<style>
</style>

H5页面(即挂载到管理端页面)

<template>
  <div>
      <el-button @click="handleToDT" >返回并发送消息</el-button>
  </div>
</template>

<script>
export default {
  data() {
    return {
    }
  },
  created() {
    var userAgent = navigator.userAgent
    if (userAgent.indexOf('AlipayClient') > -1) {
      // 支付宝小程序的 JS-SDK 防止 404 需要动态加载,如果不需要兼容支付宝小程序,则无需引用此 JS 文件。
      document.writeln('<script src="https://appx/web-view.min.js"' + '>' + '<' + '/' + 'script>')
    }
  },
  mounted() {
    // 接收来自小程序的消息。
    dd.onMessage = function(e) {
      console.log(e); //{'sendToWebView': '1'}
    }
  },
  methods: {

    handleToDT() {
      // javascript
      // 网页向小程序 postMessage 消息
      dd.postMessage({ name: '测试web-view' })
      setTimeout(()=>{
        dd.navigateTo({ url: '/pages/index/myNetwork/index' })
      },500)
    },

  }
}
</script>

<style lang="scss" scoped>
</style>

钉钉小程序文档 https://open.dingtalk.com/document/isvapp-client/web-view

到此这篇关于钉钉小程序web-view内嵌H5页面并实现通信的文章就介绍到这了,更多相关web-view内嵌H5内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 使用微信内嵌H5网页解决JS倒计时失效问题

    项目要求:将H5商城页面嵌套到公司微信公众号里 项目本身的开发跟移动端网页并无太多差异,只是这昨天遇到一个问题,说是棘手,到也简单. 用户下单后,在选择支付方式页面,有个倒计时的逻辑(从下单时开始计算,24小时后未支付,会有ws自动取消这个订单),js代码如下: <script type="text/javascript"><br> var timespan = '20160113'; //后台程序生成24小时时间差值,这里随便写写 var timer; fun

  • 钉钉小程序web-view内嵌H5页面并实现通信

    目录 前言 1.引入页面 2.在H5页面向钉钉发送消息 3.在钉钉页面向H5发送消息,继而实现双向通信 4.注意 内容调试方式 5.附双向通信全部代码 前言 今天探讨个不太常见的需求,公司需要在钉钉小程序内进行文件的上传,意图打造一个小型云盘,考虑到钉钉的上传大小等有诸多限制,以及数据的安全性,决定在钉钉内使用web-view嵌套H5上传页面,并且在完成上传动作后,需要返回小程序,并执行其他操作. 1.引入页面 在管理端新建页面,同时在钉钉页面使用web-view引入,需要后端配合传入合适的to

  • 小程序跳转到的H5页面再跳转回跳小程序的方法

    哈喽,大家上午好,萍子又来啦,本人最近一段时间一直在做小程序的项目,大大小小的坑真的是踩了不小,无奈本人啊还老是忘记自己究竟踩过那些坑,但是不得不说虽然小程序尚还有很多不完善的地方,但是还是蛮强大的啦,也是引得众公司纷纷引用小程序项目啊. 之前萍子写过一篇从小程序跳转到H5页面的博文小程序跳H5页面,那么今天我们一起来看看如何跳回来,我们要有始有终哇,O(∩_∩)O哈哈~ ####H5跳转到小程序的方法 方法有两个: 第一种比较简单,就直接点击手机的返回键,让它自动根据层级返回即可: 第二种,可

  • 微信小程序movable view移动图片和双指缩放实例代码

    movable-area是微信小程序的新组件,可以用来移动视图区域movable-view.移动方向可选择任何.垂直和平行.可移动区域里包含其他文本.图片.按钮等组件.可移动区域可绑定touchend等事件.movable-view的参数可调整动画效果. 先从movable-view开始说起吧. movable-view是小程序自定义的组件.其描述为:"可移动的视图容器,在页面中可以拖拽滑动". 官方文档地址: https://mp.weixin.qq.com/debug/wxadoc

  • 微信小程序webview组件交互,内联h5页面并网页实现微信支付实现解析

    前言 小程序支持webview以后,我们开发的好多h5页面,就可以直接在小程序里使用了,比如我们开发的微信商城,文章详情页,商品详情页,就可以开发一套,多处使用了.我们今天来讲一讲.在小程序的webview里实现微信支付功能.因为微信不允许在小程序的webview里直接调起微信支付.所以我们这节课就要涉及到小程序和webview的交互了. 老规矩先看效果. 因为这里涉及的东西比较多,录gif太多,没法上传,我就录制了一段视频出来. https://v.qq.com/x/page/t0913ipr

  • 微信小程序实现打开内置地图功能【附源码下载】

    本文实例讲述了微信小程序实现打开内置地图功能.分享给大家供大家参考,具体如下: 1.效果展示 2.关键代码 index.wxml布局文件代码 <button type="default" bindtap="openMap">打开地图</button> index.js逻辑文件代码 Page({ openMap:function(){ wx.getLocation({ type: 'gcj02', // 默认为 wgs84 返回 gps 坐标,

  • 微信小程序 监听手势滑动切换页面实例详解

    微信小程序 监听手势滑动切换页面实例详解 1.对应的xml里写上手势开始.滑动.结束的监听: <view class="touch" bindtouchstart="touchStart" bindtouchmove="touchMove" bindtouchend="touchEnd" ></view> 2.js: var touchDot = 0;//触摸时的原点 var time = 0;// 时

  • 微信小程序使用for循环动态渲染页面操作示例

    本文实例讲述了微信小程序使用for循环动态渲染页面操作.分享给大家供大家参考,具体如下: 先来看看运行效果: 这种列表效果可以说是最常见的一种,肯定不是我们一个一个写上去,这就用到了我们这次要说的for循环渲染了 其实也很简单,我就直接上代码了 wxml部分: <view wx:for='{{languageList}}' class='hua' data-name='{{item.name}}' data-id='{{item.id}}' bindtap='select'> <text

  • 微信小程序学习笔记之跳转页面、传递参数获得数据操作图文详解

    本文实例讲述了微信小程序学习笔记之跳转页面.传递参数获得数据操作.分享给大家供大家参考,具体如下: 前面一篇介绍了微信小程序表单提交与PHP后台数据交互处理.现在需要实现点击博客标题或缩略图,跳转到博客详情页面. 开始想研究一下微信小程序的web-view组件跳转传参,把网页嵌入到小程序,结果看到官方文档的一句话打消了念头,因为没有认证...... [方法一 使用navigator组件跳转传参] 前台博客列表页面data.wxml:(后台数据交互参考上一篇) <view wx:for="{

  • 微信小程序开发之全局配置与页面配置实现

    目录 一.全局配置 (1)小程序窗口的组成部分 (2)导航栏  navigationBar (3)下拉刷新页面 (4)上拉触底的距离 (5)底部导航栏 tabBar (6)图标的获取 二.页面配置 (1)概念 (2)页面配置与全局配置的关系 (3)常用配置项 三.综合案例 一.全局配置 app.json文件就是项目的全局配置文件 (1)小程序窗口的组成部分 (2)导航栏  navigationBar 1)window节点常用配置项 2)设置导航栏 设置导航栏标题文字 app.json-->win

随机推荐