编译为微信小程序插件后在uni-app中生成的代码使用了canIUse方法但小程序插件不支持该方法并报错请在编译小程序插件时移除此方法

编译为微信小程序插件后在uni-app中生成的代码使用了canIUse方法但小程序插件不支持该方法并报错请在编译小程序插件时移除此方法

操作步骤:

见附件

预期结果:

见附件

实际结果:

见附件

bug描述:

附件图片分别是编译前代码,编译为插件后代码,开发者工具运行报错,以及微信官方文档说明。 请官方修复此问题。

信息类别 信息内容
产品分类 uniapp/小程序/微信
PC开发环境 Windows
系统版本号 win10 22H2
第三方工具版本 1.06
基础库版本号 3.11
项目创建方式 CLI
CLI版本号 3.0

更多关于编译为微信小程序插件后在uni-app中生成的代码使用了canIUse方法但小程序插件不支持该方法并报错请在编译小程序插件时移除此方法的实战教程也可以访问 https://www.itying.com/category-93-b0.html

13 回复

app.vue 里面不调用前面两个API还有这个问题吗?

更多关于编译为微信小程序插件后在uni-app中生成的代码使用了canIUse方法但小程序插件不支持该方法并报错请在编译小程序插件时移除此方法的实战教程也可以访问 https://www.itying.com/category-93-b0.html


删除前两个方法后编译的结果和之前一样,看来好像并不是这两个方法造成的,也许原始框架就是这样设置的?

回复 z***@163.com: 你是hx项目还是cli项目?

回复 DCloud_UNI_JBB: cli项目

找到 node_modules/@dcloudio/uni-mp-weixin/dist/uni.api.esm.js 文件,搜索
if (!wx$2.canIUse(‘getAppBaseInfo’)) {
wx$2.getAppBaseInfo = wx$2.getSystemInfoSync;
}
if (!wx$2.canIUse(‘getWindowInfo’)) {
wx$2.getWindowInfo = wx$2.getSystemInfoSync;
}
if (!wx$2.canIUse(‘getDeviceInfo’)) {
wx$2.getDeviceInfo = wx$2.getSystemInfoSync;
} 替换为 if (!wx$2.getAppBaseInfo || !wx$2.getAppBaseInfo()) {
wx$2.getAppBaseInfo = wx$2.getSystemInfoSync;
}
if (!wx$2.getWindowInfo || !wx$2.getWindowInfo()) {
wx$2.getWindowInfo = wx$2.getSystemInfoSync;
}
if (!wx$2.getDeviceInfo || !wx$2.getDeviceInfo()) {
wx$2.getDeviceInfo = wx$2.getSystemInfoSync;
}

这样做暂时解决了???,这个问题会在后续版本中修复吗?

论坛不支持emoji表情啊,点赞变成问号了

回复 z***@163.com: 你重新编译一下插件测试下还有没有问题,后续会修复

回复 DCloud_UNI_JBB: 暂时可以了,有问题我再来反馈,感谢!!

回复 z***@163.com: 可以打个patches,避免重新安装依赖改动丢失

回复 z***@163.com: 我刚刚又更新了一下代码,更正一下再试试

回复 DCloud_UNI_JBB: 按照你最后修改的测试了,没有问题

在uni-app编译为微信小程序插件时,确实存在部分API兼容性问题。canIUse方法在插件环境中不被支持,这是微信小程序平台本身的限制。

建议在代码中通过条件编译或环境判断来规避此问题:

// 条件编译方案
// #ifndef MP-WEIXIN || MP-TOUTIAO
uni.canIUse('some.api')
// #endif

// 或环境判断方案
if (typeof uni.canIUse === 'function') {
  uni.canIUse('some.api')
}
回到顶部