浏览器复制内容

12 阅读1分钟
      if (!text) {
        this.$message({ message: '无可复制链接', type: 'warning' })
        return false
      }
      const hasNative = typeof navigator !== 'undefined' && navigator.clipboard && typeof navigator.clipboard.writeText === 'function'
      if (hasNative) {
        try {
          await navigator.clipboard.writeText(text)
          this.$message({ message: '复制成功', type: 'success' })
          return true
        } catch (err) {
          console.error('navigator.clipboard.writeText 失败,使用回退:', err)
          this.fallbackCopy(text)
          return false
        }
      } else {
        this.fallbackCopy(text)
        return false
      }
    },

    fallbackCopy(text) {
      const textarea = document.createElement('textarea')
      textarea.value = text
      // 避免页面滚动到 textarea
      textarea.style.position = 'fixed'
      textarea.style.left = '-9999px'
      document.body.appendChild(textarea)
      textarea.select()
      try {
        const successful = document.execCommand('copy')
        if (successful) {
          this.$message({ message: '复制成功', type: 'success' })
        } else {
          this.$message({ message: '复制失败,请手动复制', type: 'error' })
        }
      } catch (err) {
        this.$message({ message: '复制失败,请手动复制', type: 'error' })
      }
      document.body.removeChild(textarea)
    },