js获取剪切板内容(企业微信内嵌网页)

应用场景

在企业微信内部嵌入的网页需要获取剪切板的内容。

剪切板内容获取

读取剪切板navigator.clipboard
兼容性
在这里插入图片描述
在这里插入图片描述

navigator.clipboard.readText().then(
  clipText => {
	console.log("复制内容:",clipText);
})

腾讯会议获取会议时间、会议链接和会议号

  navigator.clipboard.readText().then(
  clipText => {
  console.log("复制内容:",clipText);
  //两个正则都可以只是第二个正则更方便我取值
  //const time = /([0-9]{4}[\/][0-9]{2}[\/][0-9]{2})[\x20]([0-9|:|-]+)/;
  const time = /([0-9]{4}[\/][0-9]{2}[\/][0-9]{2})[\x20]([0-9|:]+)([-])([0-9|:]+)/;
  const url = /(http:\/\/|https:\/\/)((\w|=|\?|\.|\/|&|-)+)/;
  const code = /(?<=\u4f1a\u8bae\u0020\u0049\u0044\uff1a)([0-9\x20]+)/;
  time.exec(clipText)&&console.log("time结果:",time.exec(clipText)[0])
  url.exec(clipText)&&console.log("url结果:",url.exec(clipText)[0])
  code.exec(clipText)&&console.log("code结果:",code.exec(clipText)[0])
});

更新=========================

因为特殊原因无法使用微信提供的调试工具,所以使用的google浏览器进行调试。上面的代码在Google浏览器是没有任何问题的,但是在移动端使用时navigator没有clipboard的方法。

企业微信页面剪切板内容读取

微信提供的API

wx.getClipboardData({
   success: function(res) {
       console.log(res.data)
  }
})

使用前记得通过config接口注入权限验证配,详细内容查看企业微信API文档
调用企业微信的获取剪切板内容的API后对数据进行解析,任然使用上文使用过的正则。

wx.getClipboardData({
   success: function(res) {
       console.log(res.data)
       const url = /(http:\/\/|https:\/\/)((\w|=|\?|\.|\/|&|-)+)/;
  	   const code = /(?<=\u4f1a\u8bae\u0020\u0049\u0044\uff1a)([0-9\x20]+)/;
  	   url.exec(res.data)&&console.log("url结果:",url.exec(res.data)[0])
  	   code.exec(res.data)&&console.log("code结果:",code.exec(res.data)[0])
  }
})

iPhone无法进入页面

以上代码在安卓上可以正常运行,并且截取内容正确,但是iPhone却出现空白,无法进入页面,(这是真的坑,因为连页面也进不去完全不知道哪里错了,排查问题排查了一下午,TAT)最后发现问题是IOS不支持零宽断言

零宽断言

接下来的四个用于查找在某些内容的之前或之后的东西,但是有不包含这些内容本身的时候,零宽断言就起到作用了。也就是说它们像\b,^,$那样用于指定一个位置,这个位置应该满足一定的条件(即断言),因此它们也被称为零宽断言1

上文中使用到的(?<=exp)就是零宽度正预测先行断言

所以iPhone直接挂了,(优秀)

修改正则

wx.getClipboardData({
   success: function(res) {
       console.log(res.data)
       const url = /(http:\/\/|https:\/\/)((\w|=|\?|\.|\/|&|-)+)/;
  	   const code = /([0-9]{3}[\x20][0-9]{3}[\x20][0-9]{3})|([0-9]{3}[-][0-9]{3}[-][0-9]{3})/;
  	   url.exec(res.data)&&console.log("url结果:",url.exec(res.data)[0])
  	   code.exec(res.data)&&console.log("code结果:",code.exec(res.data)[0])
  }
})

去掉零宽断言就可以了

更新=========================

iPhone时间对比兼容问题

iPhone真的问题多多,在对比会议时间是否过期的时候遇到的时间对比异常的问题。
时间的格式是YYYY-MM-DD HH:MM:SS,对比是否早于当前时间代码如下:

if(new Date('2021-12-22 10:55:00')>new Date){
	console.log("没有过期");
}esle{
	console.log("过期了");
	
}

以上代码在安卓和Google浏览器运行判断是正常的,但是在iPhone无论是什么情况返回都是false。因为iPhone识别的格式为YYYY/MM/DD HH:MM:SS

let time = '2021-12-22 10:55:00';
if(navigator.userAgent.includes("iPhone")){
time.replace(/-/g,"/");
}
if(new Date(time)>new Date){
	console.log("没有过期");
}esle{
	console.log("过期了");
	
}

  1. 来自link. ↩︎

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值