uni-app uni.getClipboardData 获取剪贴板时,内容为3位和6位数字会返回空字符串,其他内容正常。

发布于 1周前 作者 nodeper 来自 Uni-App

uni-app uni.getClipboardData 获取剪贴板时,内容为3位和6位数字会返回空字符串,其他内容正常。

类别 信息
产品分类 uniapp/App
PC开发环境 Windows
PC系统版本 Microsoft Windows 10 专业版,版本:10.0.19045 内部版本 19045
HBuilderX类型 正式
HBuilderX版本 4.43
手机系统 Android
手机系统版本 Android 15
手机厂商 vivo
手机机型 vivo x90pro+
页面类型 vue
vue版本 vue3
打包方式 云端
项目创建方式 HBuilderX

操作步骤:

uni.getClipboardData({  
    success: (res) => {  
      console.log('获取剪贴板成功: ', res)  
    },  
    fail: (err) => {  
      console.log('获取剪贴板失败: ', err)  
    },  
  })
```

### 预期结果:
```json
{"data":"566999","errMsg":"getClipboardData:ok"}
```

### 实际结果:
```json
{"data":"","errMsg":"getClipboardData:ok"}
```

### bug描述:
uni.getClipboardData 获取剪贴板,当内容为3位和6位的数字时会获取为空字符串,其他内容都正常。
![](https://www.itying.com/uniimg.php?url=https://img-cdn-tc.dcloud.net.cn/uploads/questions/20241227/17e4e7f2ef9baf4a7d971260c8dd85f1.png)

1 回复

在处理 uni-app 中使用 uni.getClipboardData 方法获取剪贴板数据时,如果遇到特定长度(如3位和6位数字)返回空字符串的问题,这可能是由于系统或应用层面的剪贴板处理机制导致的。尽管直接原因可能复杂且不易定位,但我们可以通过一些编程技巧来规避或检测这个问题。

以下是一个示例代码,展示了如何使用 uni.getClipboardData 并处理可能的异常情况,包括尝试重新获取或给出用户提示。为了简化说明,这里假设我们在一个 Vue 组件中实现这一功能:

<template>
  <view>
    <button @click="getClipboardContent">获取剪贴板内容</button>
    <text>{{ clipboardContent }}</text>
  </view>
</template>

<script>
export default {
  data() {
    return {
      clipboardContent: ''
    };
  },
  methods: {
    async getClipboardContent() {
      try {
        const result = await uni.getClipboardData({
          success: (res) => {
            this.clipboardContent = res.data;
            if (!this.clipboardContent && /^\d{3}$/.test(this.clipboardContent) || /^\d{6}$/.test(this.clipboardContent)) {
              // 如果检测到是3位或6位数字但返回为空,尝试重新获取或提示用户
              console.warn('Special case detected: empty clipboard data for 3 or 6 digits.');
              // 可以选择再次尝试获取,或者显示一个用户友好的提示
              // this.showAlert('Warning', 'Special case detected. Please try again.');
              // 或者直接设置一个默认值
              this.clipboardContent = 'Default Value';
            }
          },
          fail: (err) => {
            console.error('Failed to get clipboard data:', err);
            this.clipboardContent = 'Failed to retrieve';
          }
        });
      } catch (error) {
        console.error('Error in async operation:', error);
        this.clipboardContent = 'Error occurred';
      }
    },
    showAlert(title, message) {
      uni.showToast({
        title: message,
        icon: 'none'
      });
    }
  }
};
</script>

在这个示例中,我们首先尝试从剪贴板获取数据。如果获取的数据为空且匹配3位或6位数字的正则表达式,我们会记录一个警告信息,并可以选择显示一个提示给用户或设置一个默认值。这里的正则表达式 ^\d{3}$^\d{6}$ 分别用于检测3位和6位纯数字字符串。

请注意,这种方法更多是一种权宜之计,用于处理特定情况下的异常行为。根本原因可能需要深入系统或框架的底层实现进行排查。如果问题持续存在,建议向 uni-app 的开发团队报告此问题,以便他们能进一步调查并可能提供官方修复。

回到顶部