RequireJS and IE9



我试着在以前的问题中找到解决方案,但我不能。我有一个使用requireJS用jquery开发的web项目。一切似乎都很好(在所有现代浏览器中),直到我在IE9中测试,那里没有一个脚本工作。我试图找到原因,但我所能得到的是开发工具控制台的反馈:

SCRIPT1002:语法错误libCommon.js,第10行字符3

SCRIPT445:对象不支持这个动作libEvents.js,第5行角色2

这是libCommon.js的开始代码:

//generic JS for all views
define(['jquery'], function ($) {
    var LibCommon = function () {};
LibCommon.prototype.hideSubmenu = function() {
    $submenu.removeClass('show');
}
LibCommon.prototype.toggleSubmenu = function(tipo) {
    const $tipoSubmenu = $('#'+tipo);
    this.hideSubmenu();
    if (!$tipoSubmenu.hasClass('show')) {
        $tipoSubmenu.addClass('show');
    } else {
        $tipoSubmenu.removeClass('show');
    }
};
//and other functions...

libEvents.js的开头代码:

//generic JS for all views
define(['jquery', 'bootstrap', './libCommon', 'modernizr'], function ($, Bootstrap, LibCommon, Modernizr) {

var common = new LibCommon();
/**
 * =================
 * TO EXECUTE WHEN INIT
 * =================
 */
$( document ).ready(function() {
    console.log('initialized all common events');
    var common = new LibCommon();
    // Fixed header  
    var stickyNavTop = $('.topmenu').offset().top;
    common.fixedNav(stickyNavTop);
    $(window).scroll(function() {
        common.fixedNav(stickyNavTop);
    });
// and other functions or events...

在这两个错误中,它都是在requireJS中定义了所有对象/依赖之后创建一个对象的变量/实例的第一个字符,所以它不应该是一个错误。我尝试更改var common = 0;,但错误继续出现在控制台。IE9似乎不喜欢任何脚本。否则,require的实例正在工作,因为bootstrap工作正常。任何想法?

Shilly已经在评论中指出,你不应该将ES6结构传递给IE9。要么写ES5,要么用工具编译。

现在,您在libEvents中得到的错误是奇怪的,因为libCommon根本不应该加载,因此libEvents的工厂不应该运行,因为其中一个依赖项没有加载。有可能让模块加载之后给出错误。但是我不记得曾经在模块的立即解释代码中看到过语法错误,这不仅会导致加载失败。(您所显示的代码是立即解释,即使它是稍后执行。如果你有一个eval(string_of_code)在那里或Function(string_of_code)然后string_of_code将被解释,但这不是发生在你的代码。)我怀疑RequireJS继续为libEvents执行工厂的原因与在IE9和更低版本中捕获加载失败的问题有关。文档建议打开enforceDefine。我会为你的代码这样做。这并不能解决所有问题,但它可以帮助RequireJS更好地检测问题。

console.log也可能会给你带来麻烦,正如这个问题和答案所解释的。

最新更新