Javascript .js文件适用于chrome和firefox,但不适用于IE

Javascript .js文件适用于chrome和firefox,但不适用于IE,javascript,internet-explorer,ecmascript-6,Javascript,Internet Explorer,Ecmascript 6,在IE11中测试我的网站时,它的某些部分不起作用,我相信问题在于我的“custom.js”文件,因为所有问题都链接到该js。然而,该页面在Chrome和Firefox中工作得非常完美 我在页面的页脚中加载名为“custom.js”的.js文件以及其他页面特定插件(jquery和bootstrap在头部加载),如下所示: jQuery(文档).ready(函数(){ App.init(); App.initCounter(); App.initParallaxBg(); initFancybox

在IE11中测试我的网站时,它的某些部分不起作用,我相信问题在于我的“custom.js”文件,因为所有问题都链接到该js。然而,该页面在Chrome和Firefox中工作得非常完美

我在页面的页脚中加载名为“custom.js”的.js文件以及其他页面特定插件(jquery和bootstrap在头部加载),如下所示:


jQuery(文档).ready(函数(){
App.init();
App.initCounter();
App.initParallaxBg();
initFancybox();
MSfullWidth.initMSfullWidth();
initOwlEvent();
initOwlSingle();
initOwlTwo();
initOwlAbout();
});
$(文档).ready(函数(){
$('.owl carousel')。owl carousel({
导航:是的,
循环:正确
});
});

您正在使用javascript
let
关键字,该关键字仅在IE11上可用。更多信息

如果问题仍然存在,并且您确定代码正在编译,那么您应该激活浏览器的调试器以了解发生了什么。。。只需放置关键字
调试器在代码中的某个地方,浏览器将在该停止时暂停执行,允许您检查变量

大概是这样的:

debugger;
$(".helpform-container:not(.displayblock)").hide();
...
$("#news-4").before("<div class='col-md-4'><h3 id='title_featured'>Featured News</h3></div><div class='col-md-8'><h3 id='title_latest'>Latest News</h3></div>");
调试器;
$(“.helpform容器:不是(.displayblock)”).hide();
...
$(“#新闻-4”)。之前(“特色新闻最新新闻”);

问题:2013年发布的Internet Explorer 11没有运行ECMAScript 2015(原因很明显)

脏路:(独立) 这是最快但效率最低的方法。 不要在生产中使用



痛苦的方式:在ES5中重写 只需在ES5中重写
custom.js
的最后几行,以后不要使用任何ES6/7/8+功能:

var divs=$(“.owl news>.news-v2”),
数组=[
{length:1,num:4},
{length:2,num:3},
{length:2,num:3},
{length:3,num:2}
],
i=0;
array.forEach(函数(项){
divs.slice(i,i+item.length).wrapAll(“”);
i+=项目长度;
} );

系统化方法:构建脚本 适当的构建系统可以帮助您管理项目,例如自动测试和部署到测试和生产系统。 他们可以做的一件事是在部署时将您的ES6代码转换为ES5,并可能缩小/混淆它们,例如使用或

“构建系统”可以像批处理文件一样简单。 如果你告诉你的老板这会保护公司宝贵的知识产权,他可能会给你足够的时间让你好好学习


拯救网络:不支持IE 11 我知道,我知道。 你不会问这是不是一个选择

但您的上司可能没有意识到IE支持会花费更多的开发时间,这意味着更高的成本、更慢的交付速度和更少的利润

很少有人(3.2%)在现实世界中使用IE11——比“UC浏览器”(8%)、Firefox(6%)、三星互联网(3.6%)或“Opera”(3.4%)更少。(Statcounter.) 如果用户或客户问你为什么不支持,说没有人使用它不是一个好借口,因为IE11的用户更少

大多数IE用户都知道,如果它在IE中不起作用,可以试试Chrome。 鼓励他们先使用Chrome浏览器,然后再使用IE浏览器。
它们更安全,网络更光明,每个人都很开心。

检查文件是否具有非es5语法的简单方法:

npm install -g es-check
es-check es5 offendingFile.js

当你将IE垫片移动到脚本标签顶部时会发生什么?你的目标是哪个IE版本?我将其移动到页脚js上方,但似乎没有任何区别。这与预期相反。你写的是有些部分可以工作,有些部分不行。您可以添加哪些部分可以和哪些部分不可以,或者您的问题发生在哪个区域?我发现的一件事是ES6的模板语法:``-这需要是transbile才能在IE11中工作,但在Chrome中工作(foo${bar}`也会transbile'foo'+bar)。另外,如果没有传输,let将无法在IE11中工作(应该是var)…您是否收到任何javascript错误?@bastos.sergio不在IE11中,但在模拟IE10时,它会显示“预期”;“并指向第46行“let array=[”尽管在IE11中它仍然不工作,但在IE11中它没有给我任何JS错误,只是在IE11中它不工作,我在“for”(数组的let项)上再次遇到相同的错误{您正在IE11上使用ES6…您希望得到什么?作为在babel中编译所有内容的替代方法,您可以使用polyfill.io检测浏览器功能并为特定功能提供polyfill。@david25272我们可以使用polyfill方法,但不能使用polyfill语言功能,包括
let
for…of
,以及模板字符串。这些需要一个transpiler。确实,代码可以在动态注入代码(和babel)之前以正确的方式进行浏览器检测,但我希望答案保持简单。
debugger;
$(".helpform-container:not(.displayblock)").hide();
...
$("#news-4").before("<div class='col-md-4'><h3 id='title_featured'>Featured News</h3></div><div class='col-md-8'><h3 id='title_latest'>Latest News</h3></div>");
npm install -g es-check
es-check es5 offendingFile.js