uni-app plus.runtime.openURL()方法调用失败的回调函数没有走进去
uni-app plus.runtime.openURL()方法调用失败的回调函数没有走进去
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Mac | 14.1 | HBuilderX |
产品分类:uniapp/App
PC开发环境操作系统:Mac
PC开发环境操作系统版本号:14.1 (23B2073)
HBuilderX类型:Alpha
HBuilderX版本号:4.34
手机系统:Android
手机系统版本号:Android 12
手机厂商:华为
手机机型:P40
页面类型:vue
vue版本:vue3
打包方式:云端
示例代码:
// ios 跳转到appstore,.apk、.wgt 直接安装更新
const isResource = ['.apk', '.wgt'].some(ext => this.updateParams.downUrl.toLocaleLowerCase().includes(ext));
let marketOpened = false;
if (plus.os.name !== "Android" || !isResource) {
plus.runtime.openURL(this.updateParams.downUrl,(err) => {
if (err) {
console.log("应用市场打开失败")
marketOpened = false
} else {
marketOpened = true;
}
});
if (!marketOpened) {
let customH5URL = 'https://www.pgyer.com/111111'
plus.runtime.openURL(customH5URL);
}
return;
}
操作步骤:
尝试打开应用市场,如果打开失败,就打开自定义H5页面
预期结果:
打开应用市场,如果打开失败,就打开自定义H5页面
实际结果:
打开应用市场失败,没有走失败回调
bug描述:
plus.runtime.openURL()方法调用失败的回调函数没有走进去
在 uni-app
中,plus.runtime.openURL()
方法用于打开指定的 URL,它通常接受两个参数:URL 本身和一个可选的成功/失败回调函数。如果你发现调用失败的回调函数没有走进去,可能是因为多种原因,比如 URL 格式不正确、网络问题、权限问题等。下面是一个示例代码,展示了如何使用 plus.runtime.openURL()
并处理成功和失败的情况。
首先,确保你的项目已经正确配置了 manifest.json
中的必要权限,特别是网络权限。
// manifest.json
{
"mp-weixin": { // 或其他平台配置
"requiredPrivateInfos": ["networkState"]
},
"plus": {
"distribute": {
"android": {
"permissions": [
"INTERNET"
]
},
"ios": {
"infoPlist": {
"NSAppTransportSecurity": {
"NSAllowsArbitraryLoads": true
}
}
}
}
}
}
接下来,是调用 plus.runtime.openURL()
的代码示例:
// 在页面的 onLoad 或其他适当的位置调用
export default {
methods: {
openExternalUrl() {
const url = 'https://www.example.com'; // 替换为你的目标 URL
plus.runtime.openURL(url, (event) => {
// 成功回调
console.log('URL opened successfully:', event);
}, (error) => {
// 失败回调
console.error('Failed to open URL:', error);
// 可以在这里添加错误处理逻辑,比如提示用户
uni.showToast({
title: '打开链接失败',
icon: 'none'
});
});
}
},
onLoad() {
// 调用方法以测试
this.openExternalUrl();
}
}
如果失败回调没有执行,首先检查以下几点:
- URL 格式:确保 URL 是有效的,并且没有语法错误。
- 网络权限:检查应用是否有访问网络的权限,特别是在 Android 和 iOS 上。
- 调试日志:使用开发者工具查看详细的错误日志,可能会有更具体的错误信息。
- 平台差异:不同平台(如微信小程序、H5、App等)可能有不同的行为,确保在目标平台上测试。
如果以上都确认无误,但问题依旧存在,可以考虑是否有其他系统级的拦截或安全策略导致 URL 无法打开。在实际项目中,合理的错误处理和用户提示是非常重要的,以确保良好的用户体验。