DCloud_heavensoft
DCloud_heavensoft
  • 发布:2015-02-03 05:13
  • 更新:2024-01-15 11:58
  • 阅读:81800

plus初始化原理及plus is not defined,mui is not defined 错误汇总

分类:HTML5+

关于plus是哪里来的问题

plus是5+Runtime的内部对象。
就像chrome浏览器里有chrome.开头的一些对象方法,5+runtime内部内置了plus对象。
因为plus和mui不一样,plus是引擎级别的,不需要前端框架。而mui是前端框架,所以是要引入mui.js才能使用的。

不要在没有plus和mui的环境下调用相关API

普通浏览器里没有plus环境,只有HBuilder真机运行、打包后、或流应用环境下才能运行plus api。  
在普通浏览器里运行时plus api时控制台必然会输出plus is not defined错误提示。  
mui作为一个前端框架,你必须保证当前页面引入了mui.js。否则也会出现mui is not defined。  

不要在plus和mui未完成初始化时调用相关API

就像在dom初始化完成前(DOMContentLoaded)去操作dom,就会报错是一样的道理。  
plus和mui都需要初始化,在初始化完成后调用再调用。  
一般我们在plusready的回调事件里调用plus api。
        document.addEventListener('plusready',function () {  
		// 在这里调用plus api  
	},false);

执行更高效的写法是这样,如果plus已经存在,就直接使用

        function plusReady(){  
	        // 在这里调用plus api  
        }  
        if(window.plus){  
        	plusReady();  
        }else{  
        	document.addEventListener('plusready',plusReady,false);  
        }
mui框架对此进行了封装,写法更简单:  
        mui.plusReady(function(){  
             // 在这里调用plus api  
        });
事实上,mui作为一个框架,也有初始化的过程,但mui的初始化过程在DOMContentLoaded完毕后就结束了。  
mui ready的写法是这样,但一般无需使用。  
        mui.ready(function () {  
  
        })

关于加载顺序

plus的ready的时间,在2016年12月后的ios版本上,其实是随时可用状态,不需要plus ready概念,但为了保持向下兼容,也仍然存在plus的ready事件;而安卓版本,plus的ready的时间是可以调节的。具体参考http://ask.dcloud.net.cn/article/921
而mui的ready一般伴随DOMContentLoaded而完成。
详细的启动时序参考这里:http://ask.dcloud.net.cn/article/571

20 关注 分享
堪培拉的风 Solomon Eric_Guo 开心的哈鲁 xLsDg 阿许2016 西瓜果果 王大大 牛顿爱吃苹果 April小小2 飘逸的厨子 cjxapple 雪之梦技术驿站 Element 1***@qq.com Trust 川川 iamhuhongtao abiu 3***@qq.com

要回复文章请先登录注册

1***@qq.com

1***@qq.com

您好,我是用HbuilderX进行APP资源打包后在AS中调用在运行到手机上,一直报plus is not defined,直接使用HbuilderX运行到手机上就正常请问这怎么解决呀。
2024-01-15 11:58
DCloud_heavensoft

DCloud_heavensoft (作者)

回复 1***@qq.com :
要App真机,你别搞个小程序真机来跑plus代码
2020-08-26 14:33
1***@qq.com

1***@qq.com

为什么真机调试一样是plus is undefined?
2020-08-25 15:01
h***@163.com

h***@163.com

回复 大刀侠 :
是的
2018-11-08 14:42
DCloud_heavensoft

DCloud_heavensoft (作者)

回复 gzg :
你的问题和本文没关系。底部导航用nview实现:http://ask.dcloud.net.cn/article/12602
2018-08-27 22:06
gzg

gzg

楼主写的很好,有个问题就是,怎么在子页面下的详情页面也能显示底部导航?搞了半天弄不出来。。
2018-08-27 17:27
七岁小猫

七岁小猫

请问一个js里是否可以包含多个plusready 比如 plusready1 和plusready2,因为自己封装的util.js里已经写了一个plusready,其他页面引用了util 但自身还需要plusready
2018-06-14 15:15
DCloud_heavensoft

DCloud_heavensoft (作者)

回复 飞apple55 :
http://ask.dcloud.net.cn/article/571
2017-01-20 00:56
飞apple55

飞apple55

plusReady有没有什么办法提高ready速度,,每次等待ready都好慢,这个和什么有关系??
2017-01-19 15:00
5***@qq.com

5***@qq.com

回复 大刀侠 :
不存在,还调用,肯定要报错呀
2016-10-24 18:29