uni-app 4.28版本无法调用 getAppWebview

发布于 1周前 作者 eggper 来自 Uni-App

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就正常
更新一下 标准基座没问题,自定义基座有问题

image

信息 描述
产品分类 uniapp/App
PC开发环境 Windows
PC开发环境版本 win10
HBuilderX类型 正式
HBuilderX版本 4.28
手机系统 Android
手机系统版本 Android 15
手机厂商 小米
手机机型 红米k40
页面类型 vue
vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

16 回复

HBuilderX 4.29.2024093009 已修复。


4.29还是不行

回复 2***@qq.com: 收到, 我看下

回复 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 版本中无法工作,可能是由于以下几个原因:

  1. API 变更:uni-app 的不同版本之间可能存在 API 的变更。建议查阅 uni-app 官方文档 或者更新日志,确认 getAppWebview 方法在当前版本中的可用性和调用方式。

  2. 平台限制:某些平台(如小程序)可能不支持 getAppWebview 方法。确保你的代码运行在支持该方法的平台上。

  3. 编译配置:检查你的 manifest.jsonpages.json 配置文件,确保没有错误地配置了与 WebView 相关的选项。

  4. 代码错误:检查代码中是否有其他逻辑错误或异步调用问题,导致 getAppWebview 无法正确执行。

如果以上方法都无法解决问题,并且你确认需要使用 getAppWebview 方法,建议尝试以下步骤:

  • 在 uni-app 社区或者官方论坛中搜索类似问题,看看是否有其他开发者遇到并解决了相同的问题。
  • 提交 bug 报告给 uni-app 官方团队,提供详细的复现步骤和错误信息,以便他们进行调查和修复。

请注意,由于我无法直接访问你的开发环境和代码,以上建议仅供参考。在实际开发中,你可能需要根据具体情况进行调整和优化。

回到顶部