uni-app 4.28版本无法调用 getAppWebview
uni-app 4.28版本无法调用 getAppWebview
示例代码:
console.log("this.$root",this.$root)
console.log("this.$scope",this.$root.$scope)
console.log("this.$scope.$getAppWebview",this.$root.$scope.$getAppWebview)
操作步骤:
console.log("this.$root",this.$root)
console.log("this.$scope",this.$root.$scope)
console.log("this.$scope.$getAppWebview",this.$root.$scope.$getAppWebview)
预期结果:
正常打印
实际结果:
TypeError: Cannot read property '$getAppWebview' of undefined
bug描述:
4.28版本无法获取调 getAppWebview
,回退版本4.24就正常
更新一下 标准基座没问题,自定义基座有问题
信息 | 描述 |
---|---|
产品分类 | uniapp/App |
PC开发环境 | Windows |
PC开发环境版本 | win10 |
HBuilderX类型 | 正式 |
HBuilderX版本 | 4.28 |
手机系统 | Android |
手机系统版本 | Android 15 |
手机厂商 | 小米 |
手机机型 | 红米k40 |
页面类型 | vue |
vue版本 | vue2 |
打包方式 | 云端 |
项目创建方式 | HBuilderX |
HBuilderX 4.29.2024093009 已修复。
4.29还是不行
回复 2***@qq.com: 我这边测试HBuilderX 4.29.2024093009 正式版可以正常用
回复 2***@qq.com: 你要不提供一下demo工程
你好, 我这边用vue2和vue3 的自定义基座测试都正常 ,提供一下复现工程
这边又测了一下 确定是页面是 setup语法的情况下用不了
用这个的是一个组件准确的讲是setup语法下组件中无法调用
回复 2***@qq.com: 提供一下代码片段, setup 你是如何用this的
回复 BFC: 页面用的是setup, 组件还是vue2的写法,组件中使用的this
回复 2***@qq.com: 好的, 我测试一下
已确认bug, 感谢反馈
这边测试了一下4.29还是不行
const pages = getCurrentPages();
if (pages.length > 0) {
const currentPage = pages[pages.length - 1];
const currentWebview = currentPage.$getAppWebview();
if (currentWebview) {
currentWebview.setStyle({
popGesture: ‘none’, // 取消手势返回
});
}else {
console.error(‘currentWebview 不存在’);
}
}
暂时这样解决 不知道会不会有问题
获取到webview实例后,无法使用evalJs,怎么弄一下能解决
const pages = getCurrentPages()
const currentPage = pages[pages.length - 1];
const currentWebview = currentPage.$getAppWebview()
console.info(currentWebview.children()[0].evalJs)
在uni-app中,getAppWebview
方法通常用于获取当前页面的 WebView 对象,以便进行一些与 WebView 相关的操作,比如调整透明度、执行 JS 代码等。然而,如果你发现在 uni-app 4.28 版本中无法调用 getAppWebview
,这可能是由于 API 的变更或者某些特定条件下的限制。
首先,需要确认你的使用场景和调用方式是否正确。在正常情况下,getAppWebview
应该在页面的生命周期函数或者特定的上下文中被调用。以下是一个基本的示例代码,展示如何在 uni-app 中尝试获取 WebView 对象:
// 在页面的 onLoad 或其他生命周期函数中调用
export default {
onLoad() {
// 尝试获取当前页面的 WebView 对象
const webview = this.$mp.page.getAppWebview();
if (webview) {
console.log('成功获取 WebView 对象:', webview);
// 可以在这里对 webview 进行操作,比如设置透明度
webview.setStyle({
opacity: 0.8
});
} else {
console.error('无法获取 WebView 对象');
}
},
// 其他页面逻辑...
};
然而,如果你发现上述代码在 uni-app 4.28 版本中无法工作,可能是由于以下几个原因:
-
API 变更:uni-app 的不同版本之间可能存在 API 的变更。建议查阅 uni-app 官方文档 或者更新日志,确认
getAppWebview
方法在当前版本中的可用性和调用方式。 -
平台限制:某些平台(如小程序)可能不支持
getAppWebview
方法。确保你的代码运行在支持该方法的平台上。 -
编译配置:检查你的
manifest.json
和pages.json
配置文件,确保没有错误地配置了与 WebView 相关的选项。 -
代码错误:检查代码中是否有其他逻辑错误或异步调用问题,导致
getAppWebview
无法正确执行。
如果以上方法都无法解决问题,并且你确认需要使用 getAppWebview
方法,建议尝试以下步骤:
- 在 uni-app 社区或者官方论坛中搜索类似问题,看看是否有其他开发者遇到并解决了相同的问题。
- 提交 bug 报告给 uni-app 官方团队,提供详细的复现步骤和错误信息,以便他们进行调查和修复。
请注意,由于我无法直接访问你的开发环境和代码,以上建议仅供参考。在实际开发中,你可能需要根据具体情况进行调整和优化。