首页 小程序开发 正文内容

uni-app 运行控制台报错:plus is not defined 怎么解决?

2023年08月20日 , 261

uni-app 项目运行到小程序模拟器很容易出现这个问题,本文展示如何解决这个报错。

问题描述

在开发 uni-app 项目时,将当前项目运行调试时,控制台打印出下面的报错信息

plus is not defined.

报错之后的 js 代码也无法执行,有些页面空白、白屏

原因分析

根据控制台打印的信息,意思是 plus 这个变量没有定义,这是 html5plus 的默认变量,作用是用来增强 APP 开发,调用安卓和 iOS 的各种原生能力。需要注意的是这些 api 只能在 APP 环境中有效,所以你的代码中应该是在非 APP 环境调用了 html5plus 的 api 导致的。

解决办法

首先确定你的项目运行的环境,如果是 H5 或者是小程序,plus 相关的功能都不能用,需要删掉。如果你的项目是一套代码多端运行的项目,这些代码是运行在 APP 时要用到的,那就使用 uni-app 的条件编译,让它们只在 APP 上才编译,这样就可以解决报错问题。条件编译的代码类似这样:

//#ifdef APP-PLUS
plus.push.addEventListener('click', function (msg) {
   var payload = null;
   var action = '';
   if (msg.payload) {
      if (typeof msg.payload === 'string') {
         payload = JSON.parse(msg.payload);
      }
      action = payload.action;
      if (action === 'open') {
         plus.webview.open(payload.ur1);
      }
   }
});
//#endif

添加 APP-PLUS 的条件编译后,上面这段代码只在 APP 端生效,运行和编译到 H5 和小程序端不会生效,报错也不会出现,是官方推荐的一套代码多端兼容方案。