uni-app API uni.makePhoneCall 报Bug
uni-app API uni.makePhoneCall 报Bug
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Windows | win10 19042.610 | HBuilderX |
### 示例代码:
```jsx
uni.makePhoneCall({
phoneNumber: "10086", // 建议类型不要限制为string.而是在接口内部将传递过来的数据转化为string 例如 toString()
success() { // 在没有拨打电话环境下,例如PC,也将调用此方法.
uni.showToast({ title: "拨打电话成功" });
let t = setTimeout(() => {
clearTimeout(t);
uni.hideToast();
}, 2000);
},
fail() {
uni.showToast({ title: "拨打电话失败" });
let t = setTimeout(() => {
clearTimeout(t);
uni.hideToast();
}, 2000);
}
});
操作步骤:
如代码所示.
预期结果:
拥有拨打环境 才调用success(不管用户是否真正拨打电话);
实际结果:
在h5环境中.全部调用了success
bug描述:
uni.makePhoneCall 这个api在PC浏览器(以及其他没有拨打电话功能的环境)中, 将电话号码设置为文本后,均调用success,如果电话号码为整数,小数.在所有环境下(无论是否有拨打电话的环境)则均调用fail;
正确逻辑应该是 拥有拨打环境 才调用success(不管用户是否真正拨打电话);
更多关于uni-app API uni.makePhoneCall 报Bug的实战教程也可以访问 https://www.itying.com/category-93-b0.html
2 回复
由于浏览器的限制,无法判断是否拥有拨打环境
更多关于uni-app API uni.makePhoneCall 报Bug的实战教程也可以访问 https://www.itying.com/category-93-b0.html
关于uni.makePhoneCall在H5环境下的行为问题,这确实是API设计上的一个缺陷。在H5平台,由于浏览器没有直接拨打电话的能力,该API的实现逻辑需要优化:
-
当前H5平台的处理方式确实不够严谨,无论环境是否支持拨号都会触发success回调,这不符合预期行为。
-
建议的修正方案应该是:
- 在调用API时先检测运行环境是否支持电话功能
- 对于不支持的平台(如PC浏览器),应该直接触发fail回调
- 参数类型处理也应当统一,内部做toString转换
- 临时解决方案:
function safeMakePhoneCall(num) {
if(!uni.canMakePhoneCall) { // 自行判断环境
console.log('当前环境不支持拨打电话');
return;
}
uni.makePhoneCall({
phoneNumber: String(num),
success() {
// 真实支持拨号的环境才会进入
},
fail() {
// 处理失败情况
}
});
}