min特有的 预加载功能在老版本手机不能顺利执行,体验会降低
解决方案:通过动态判断手机是否支持 ,如果不支持,则采用其他方式
在 setInterval 循环中添加次数,如果大于10次不成功则代表不支持(正常的1次就行通过)
出现问题的代码
var mainPage = mui.preload({
"id": 'main',
"url": 'main.html'
});
var main_loaded_flag = false;
mainPage.addEventListener("loaded",function () {
main_loaded_flag = true;
});
在上面的代码中 mainPage.addEventListener("loaded",function () {
这个函数没有正常执行,也就是 mui.preload 预加载失败,则下面的跳转就失败了
var toMain = function() {
//使用定时器的原因:
//可能执行太快,main页面loaded事件尚未触发就执行自定义事件,此时必然会失败
var id = setInterval(function () {
if(main_loaded_flag){
clearInterval(id);
$.fire(mainPage, 'show', null);
mainPage.show("pop-in");
}
},20);
};
改成如下方式,做手机兼容:
var toMain = function() {
var id = setInterval(function () {
checkPreloadSuccess ++;
if(checkPreloadSuccess>10){
checkPreloadSuccess=0;
console.log('手机不支持 Preload 采用openWindow');
mui.openWindow({
url: 'main.html',
id: "main"
});
clearInterval(id);
}
if(main_loaded_flag){
clearInterval(id);
$.fire(mainPage, 'show', null);
mainPage.show("pop-in");
}
},20);
};