uni-app uni.setClipboardData 报Bug

uni-app uni.setClipboardData 报Bug

示例代码:

uni.setClipboardData({  
    data: this.data,  
    success() {  
        uni.showToast({  
            title: "复制成功",  
        })  
    }  
})

操作步骤:

uni.setClipboardData({  
    data: this.data,  
    success() {  
        uni.showToast({  
            title: "复制成功",  
        })  
    }  
})

预期结果:

预期是没有任何报错的,只是copy 一下字符串而已

实际结果:

提示如下

[WEB] 类型“Uni”上不存在属性“setClipboardData”。 [APP-ANDROID] 类型“Uni”上不存在属性“setClipboardData”。

编译器报错如下

15:01:22.789 [plugin:uni:app-uts] 编译失败 15:01:22.789 error: Unresolved reference: setClipboardData 15:01:22.789 at pages/index/index.uvue:62:8 15:01:22.789 60 | }, 15:01:22.789 61 | copy() { 15:01:22.789 62 | uni.setClipboardData({ 15:01:22.789 | ^ 15:01:22.789 63 | data: this.data, 15:01:22.789 64 | success() {

15:01:22.789 error: Unresolved reference: uni_setClipboardData 15:01:22.789 at pages/index/index.uvue:62:4 15:01:22.789 60 | }, 15:01:22.789 61 | copy() { 15:01:22.789 62 | uni.setClipboardData({ 15:01:22.789 | ^ 15:01:22.789 63 | data: this.data, 15:01:22.789 64 | success() {

15:01:22.789 error: Unresolved reference: SetClipboardDataOptions 15:01:22.789 at pages/index/index.uvue:62:4 15:01:22.789 60 | }, 15:01:22.789 61 | copy() { 15:01:22.789 62 | uni.setClipboardData({ 15:01:22.789 | ^ 15:01:22.789 63 | data: this.data,

15:01:22.789 error: Cannot infer a type for this parameter. Please specify it explicitly. 15:01:22.789 at pages/index/index.uvue:64:5 15:01:22.789 62 | uni.setClipboardData({ 15:01:22.789 63 | data: this.data, 15:01:22.789 64 | success() { 15:01:22.789 | ^ 15:01:22.789 65 | uni.showToast({ 15:01:22.789 66 | title: “复制成功”,


### bug描述:

提示如下  

[WEB] 类型“Uni”上不存在属性“setClipboardData”。
[APP-ANDROID] 类型“Uni”上不存在属性“setClipboardData”。

编译器报错如下  

15:01:22.789 [plugin:uni:app-uts] 编译失败
15:01:22.789 error: Unresolved reference: setClipboardData
15:01:22.789 at pages/index/index.uvue:62:8
15:01:22.789 60 |     },
15:01:22.789 61 |     copy() {
15:01:22.789 62 |      uni.setClipboardData({
15:01:22.789   |          ^
15:01:22.789 63 |       data: this.data,
15:01:22.789 64 |       success() {

15:01:22.789 error: Unresolved reference: uni_setClipboardData
15:01:22.789 at pages/index/index.uvue:62:4
15:01:22.789 60 |     },
15:01:22.789 61 |     copy() {
15:01:22.789 62 |      uni.setClipboardData({
15:01:22.789   |      ^
15:01:22.789 63 |       data: this.data,
15:01:22.789 64 |       success() {

15:01:22.789 error: Unresolved reference: SetClipboardDataOptions
15:01:22.789 at pages/index/index.uvue:62:4
15:01:22.789 60 |     },
15:01:22.789 61 |     copy() {
15:01:22.789 62 |      uni.setClipboardData({
15:01:22.789   |      ^
15:01:22.789 63 |       data: this.data,

15:01:22.789 error: Cannot infer a type for this parameter. Please specify it explicitly.
15:01:22.789 at pages/index/index.uvue:64:5
15:01:22.789 62 |      uni.setClipboardData({
15:01:22.789 63 |       data: this.data,
15:01:22.789 64 |       success() {
15:01:22.789   |       ^
15:01:22.789 65 |        uni.showToast({
15:01:22.789 66 |         title: "复制成功",

更多关于uni-app uni.setClipboardData 报Bug的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

更多关于uni-app uni.setClipboardData 报Bug的实战教程也可以访问 https://www.itying.com/category-93-b0.html


在使用 uni-appuni.setClipboardData 方法时,可能会遇到一些常见问题或 Bug。以下是一些可能的原因和解决方案:

1. 权限问题

  • 问题描述:在某些平台(如微信小程序)上,剪贴板操作可能需要用户授权。
  • 解决方案:确保在调用 uni.setClipboardData 之前,检查并请求用户授权。
uni.getSetting({
  success(res) {
    if (!res.authSetting['scope.writePhotosAlbum']) {
      uni.authorize({
        scope: 'scope.writePhotosAlbum',
        success() {
          uni.setClipboardData({
            data: '要复制的内容',
            success() {
              uni.showToast({
                title: '复制成功',
                icon: 'none'
              });
            }
          });
        }
      });
    } else {
      uni.setClipboardData({
        data: '要复制的内容',
        success() {
          uni.showToast({
            title: '复制成功',
            icon: 'none'
          });
        }
      });
    }
  }
});

2. 异步问题

  • 问题描述uni.setClipboardData 是一个异步操作,如果在回调中执行其他操作,可能会导致问题。
  • 解决方案:确保在 success 回调中处理后续逻辑,或者在 fail 回调中处理错误。
uni.setClipboardData({
  data: '要复制的内容',
  success() {
    uni.showToast({
      title: '复制成功',
      icon: 'none'
    });
  },
  fail(err) {
    console.error('复制失败', err);
  }
});

3. 平台兼容性问题

  • 问题描述:某些平台可能不支持 uni.setClipboardData 方法,或者表现不一致。
  • 解决方案:检查当前运行平台,并针对不同平台做兼容处理。
if (uni.setClipboardData) {
  uni.setClipboardData({
    data: '要复制的内容',
    success() {
      uni.showToast({
        title: '复制成功',
        icon: 'none'
      });
    }
  });
} else {
  uni.showToast({
    title: '当前平台不支持剪贴板操作',
    icon: 'none'
  });
}

4. 参数错误

  • 问题描述data 参数为空或格式不正确。
  • 解决方案:确保 data 参数是一个非空字符串。
uni.setClipboardData({
  data: '要复制的内容', // 确保这是一个非空字符串
  success() {
    uni.showToast({
      title: '复制成功',
      icon: 'none'
    });
  }
});

5. 版本问题

  • 问题描述uni-app 或平台 SDK 版本过旧,导致方法不可用或行为异常。
  • 解决方案:确保 uni-app 和平台 SDK 是最新版本,并检查是否有相关 Bug 修复。

6. 调试和日志

  • 问题描述:无法确定问题的具体原因。
  • 解决方案:使用 console.loguni.showModal 输出调试信息,或者在 fail 回调中捕获错误信息。
uni.setClipboardData({
  data: '要复制的内容',
  success() {
    console.log('复制成功');
  },
  fail(err) {
    console.error('复制失败', err);
  }
});

7. 使用 uni.setClipboardData 的 Promise 版本

  • 问题描述:处理异步操作时,使用回调函数可能会导致代码难以维护。
  • 解决方案:可以将 uni.setClipboardData 封装成 Promise 版本,以便使用 async/await
function setClipboardData(data) {
  return new Promise((resolve, reject) => {
    uni.setClipboardData({
      data,
      success: resolve,
      fail: reject
    });
  });
}

async function copyToClipboard() {
  try {
    await setClipboardData('要复制的内容');
    uni.showToast({
      title: '复制成功',
      icon: 'none'
    });
  } catch (err) {
    console.error('复制失败', err);
  }
}

copyToClipboard();
回到顶部