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

image

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

更多关于uni-app 4.28版本无法调用 getAppWebview的实战教程也可以访问 https://www.itying.com/category-93-b0.html

16 回复

HBuilderX 4.29.2024093009 已修复。

更多关于uni-app 4.28版本无法调用 getAppWebview的实战教程也可以访问 https://www.itying.com/category-93-b0.html


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 官方团队,提供详细的复现步骤和错误信息,以便他们进行调查和修复。

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

回到顶部