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

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

要回复文章请先登录注册

大刀侠

大刀侠

既然plus在浏览器中是不存在的,那是不是意味着浏览器执行结果会和真机运行结果不一致?
2016-10-19 22:41
DCloud_heavensoft

DCloud_heavensoft (作者)

回复 飘逸的厨子 :
点文档-流应用,了解什么是流应用
2016-09-14 23:09
飘逸的厨子

飘逸的厨子

请问,什么叫“流应用环境”? 该怎么实现?
2016-09-14 17:57
杰世

杰世

想问下 离线打包的时候运行程序,plus和mui的环境的环境都需要什么文件,用你们的给的hello可以运行但是太大,自建工程就产生plus is not defined,测试多种方法,应该是环境有问题,但是没找到有文档描述,配置plus都需要什么环境
2016-05-09 10:29
AllenKing

AllenKing

测试onload事件经常先于plusReady执行啊,,,
2016-04-11 18:44
付权

付权

mui.ready(function () {

})封装了document.addEventListener('plusready',plusReady,false);这句,但是这句能保证plus ready 准备好了吗?
2016-01-08 16:32
gadget2k

gadget2k

请问一下,HTML5现在支持多线程,web workers(http://www.w3school.com.cn/html5/html_5_webworkers.asp),但是要求单独提供一个js文件。本来运行很好的到了worker里就报plus not defined. 怎么解决?
2015-10-16 16:26
大墨迹

大墨迹

你真机上去测试啊,报错是编辑器使用了PC上的浏览器后的报错,在手机上看看能否运行
2015-08-09 01:01
雪狐

雪狐

function test() {

mui.plusReady(function() {
mui.openWindow({
url: "test.html"
});
});
}
我在里边调用了,但是还是报Uncaught ReferenceError: plus is not defined ,怎么回事啊
2015-05-11 16:17