uni-app vue3版本打包h5后 webview页面跳转报错(uni[e] is not a function)

uni-app vue3版本打包h5后 webview页面跳转报错(uni[e] is not a function)

开发环境 版本号 项目创建方式
Windows 19043.1645 HBuilderX
产品分类:uniapp/H5

浏览器平台:Chrome  
浏览器版本:101.0.4951.54  

App下载地址或H5网址:[http://vue3-hellouniapp.dcloud.net.cn/pages/component/web-view-local/web-view-local](http://vue3-hellouniapp.dcloud.net.cn/pages/component/web-view-local/web-view-local)

操作步骤:
打开官方dome  vue3版本(下面是地址),点击跳转,报错  
[http://vue3-hellouniapp.dcloud.net.cn/pages/component/web-view-local/web-view-local](http://vue3-hellouniapp.dcloud.net.cn/pages/component/web-view-local/web-view-local)

预期结果:
能成功跳转页面

实际结果:
Uncaught TypeError: uni[e] is not a function

bug描述:
vue3版本打包成H5后,webview嵌套的html页面内部调用uni.switchTab等跳转方法报错;  
官方dome也是一样的  
[http://vue3-hellouniapp.dcloud.net.cn/pages/component/web-view-local/web-view-local](http://vue3-hellouniapp.dcloud.net.cn/pages/component/web-view-local/web-view-local)

![](https://www.itying.com/uniimg.php?url=https://img-cdn-tc.dcloud.net.cn/uploads/questions/20220512/2efcaee764bc2531e83bf9ce883cd2e3.png)
13 回复

但问题是 这个页面上写了 只有在App内有效 app端我试了 2和3 都没有问题


在hbuilderx里面的web配置,把摇树优化打开,再关闭一下,这样配置里面就会显式指定关闭摇树优化。https://uniapp.dcloud.net.cn/collocation/manifest.html#treeshaking

实测没毛病啊 你是怎么个步骤 给个demo可好

直接用的官方的dome(Hello uni-app),选择vue3版本,在打包部署

必须打包才能出现这个情况么 不打包不行?

是的,本地直接运行是可以跳转的,打完包就GG;已经放弃了,改回vue2版本了

同样的bug,怎么没人解决?

朋友,没得搞啊,我早已放弃在uniapp里面使用vue3了, 如果你的项目里面没有webview那还是可以使用vue3的

我回退版本到3.5.3,解决了这个问题,希望对大家有帮助!

在使用 uni-app Vue3 版本打包 H5 时,如果遇到 uni[e] is not a function 的错误,通常是因为在 H5 环境中,uni 对象的方法无法正常调用。这种情况可能是由于 H5 环境下 uni 对象的某些方法不支持或未正确加载导致的。

以下是一些可能的解决方案和排查步骤:


1. 检查 uni 方法的兼容性

  • 确认你调用的 uni 方法在 H5 环境中是否支持。例如,uni.navigateTouni.redirectTo 等方法在 H5 中可能无法直接使用。
  • H5 环境下的页面跳转通常需要使用 window.location.href 或 Vue Router 来实现。

2. 使用条件编译

  • 使用 uni-app 的条件编译功能,针对不同平台编写不同的代码。例如:
    // #ifdef H5
    window.location.href = '/new-page';
    // #endif
    
    // #ifndef H5
    uni.navigateTo({
      url: '/pages/new-page'
    });
    // #endif

3. 检查 uni 对象是否存在

  • 在 H5 环境中,确保 uni 对象已正确加载。可以在代码中打印 uni 对象,检查其是否可用:
    console.log(uni);
  • 如果 uni 对象未加载或方法缺失,可能需要检查 uni-app 的版本或配置。

4. 使用 Vue Router 替代

  • 在 H5 环境中,建议直接使用 Vue Router 进行页面跳转。例如:
    import { useRouter } from 'vue-router';
    
    const router = useRouter();
    router.push('/new-page');

5. 检查 uni-app 版本

  • 确保你使用的 uni-app 版本支持 Vue3。如果版本较旧,可能会出现兼容性问题。
  • 更新到最新版本的 uni-app:
    npm install @dcloudio/uni-app@latest

6. 检查打包配置

  • 确认 H5 打包配置是否正确。检查 manifest.json 中的 h5 配置项,确保没有遗漏或错误。

7. 调试具体错误

  • 打开浏览器的开发者工具,查看具体的报错信息和调用栈,定位问题所在。
  • 如果错误信息指向某个插件或库,可能需要检查该插件是否兼容 Vue3 或 H5 环境。

8. 示例代码

以下是一个兼容 H5 和小程序的跳转示例:

export default {
  methods: {
    navigateToPage() {
      // #ifdef H5
      window.location.href = '/new-page';
      // #endif

      // #ifndef H5
      uni.navigateTo({
        url: '/pages/new-page'
      });
      // #endif
    }
  }
};
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!