js复制文本内容并粘贴到短信模板时参数缺失

发布时间 2023-04-27 16:45:41作者: ╰透在骨子里的小傲娇

基本知识

知识点1:复制文本内容

  • vue中提供了vue-clipboard2是前端能够调用剪切板的一个插件。

知识点2:移动端拉起本地短信功能,并填充内容

  • 安卓 sms:?body=内容
  • 苹果 sms:&body=内容

问题:

针对苹果系统:
当内容中携带链接时,而链接需要携带多个参数时,我们正常的思维是用多个&连接参数,但是这存在问题,尝试后发现&及其后的内容缺失。

解决方法:将&用%26代替,然后再使用encodeURIComponent方法编译一下。

亲测有效,具体参考代码如下:

    import VueClipboard2 from 'vue-clipboard2'
    Vue.use(VueClipboard2)
    // 粘贴消息至本地短信模板
    copyToSendMsg () {
      // 判断环境
      const u = navigator.userAgent
      const isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1
      const isIOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/)
      console.log('isAndroid', isAndroid)
      console.log('isIOS', isIOS)
      // 组合数据
      const originMessage = '您好,下面是跳转链接:'
      const url = 'https://test.cn/xxx/#/tip'
      const paramsAndroid = '?info=hello%26type=2' // 安卓环境,&需要用%26替代,后面再encode一下,才能正确触发
      const paramsIOS = '?info=hello&type=2' // ios环境, &可以直接写
      let message = ''
      if (isAndroid) {
        message = originMessage + '\n' + encodeURIComponent(url + paramsAndroid)
      } else if (isIOS) {
        message = originMessage + '\n' + encodeURIComponent(url + paramsIOS)
      }
      // 复制内容,然后拉起短信功能
      this.$copyText(message).then(e => {
        Toast('复制成功,请至短信中粘贴')
        setTimeout(() => {
          if (isAndroid) {
            window.location.href = 'sms:?body=' + message
          } else if (isIOS) {
            window.location.href = 'sms:&body=' + message
          }
        }, 200)
      }, () => {})
    }