一、兼容ES6问题
1、在项目中使用到了ES6的Promise对象,代码在谷歌浏览器中正常运行,而在360浏览器下的兼容模式下,IE内核是不支持Promise的。
2、通过can i use网站https://caniuse.com/)查到的ES6 promise的支持情况
3、要是在项目中使用Promsie对象,解决方法是使用第三方插件bluebird.js(github地址:https://github.com/petkaantonov/bluebird)
4、总结:bluebird中对ES6的原生Promise进行了封装,解决了浏览器兼容性问题
二、兼容IE内核的浏览器
引入 <script src = "https://cdn.polyfill.io/v2/polyfill.min.js"></script>
或 <script type="text/javascript" src = "https://cdn.polyfill.io/v2/polyfill.min.js?features=es6"></script>
function menuType(){
menuA = this;
var promise = new Promise(function(resolve, reject){
wilddog.sync().ref('').orderByKey().once('value', function (snapshot) {
var list = snapshot.val();
$("#leftNav nav").empty();
var html = "";
$.each(list, function (i, n) {
menuA.menuArr.push(i);
menuA.contentArr.push(n.total);
html += "<span class='fenlei' title='" + n.title + "' value="+i+">" + n.title + "</span>";
})
$("#leftNav nav").html(html);
resolve(menuArr);
});
});
return promise;
}
menuType().then(function(menuArr){
// 视频查询全部
videoAll();
})
async function videoAll() {
// 专家推荐视频-------------------------------start
$("#expert").empty();
wilddog.sync().ref('').orderByChild('update_time').limitToLast(homepagesize).on("child_added", function (recommenddata) {
let n = recommenddata.val();
let i = recommenddata.key();
var rechtml = "";
rechtml += '<div class="flex-box" clickhref="'+ i + '" value="' + i + '"><span class="preview-box"><i class="icon icon-video-play"></i><img src="http://' + n.thumbnail + '" /></span>'+
'<h4 class="video-title">' + n.description + '</h4>'+
'<span class="corner">会员免费</span><span class="look">'+
'<i class="icon icon-eye"></i>'+ n.clickamount + '人学过</span></div>';
$("#expert").prepend(rechtml);
});
// 专家推荐视频--------------------------------end
// 普通视频------------------------------------start
var menulength = menuArr.length;
$(".djt").empty();
for (var j=0; j<menulength; j++)
{
// 找到分类节点名称
mtype = menuArr[j];
var cnum = await countnum(mtype);
// 普通视频获取
details(mtype,cnum)
}
}
三、项目开发环境(低版本浏览器中的兼容)
1. 先下载依赖,这个不用多说
npm i es6-promise --save-dev
2. 在 /src/main.js 中引入 es6-promise 包,并使用
import promise from 'es6-promise';
// 兼容 Promise
promise.polyfill();