RequireJS和IE9

时间:2016-08-19 12:03:05

标签: javascript jquery requirejs internet-explorer-9

我试图在之前的问题中找到解决方案,但我无法做到。 我有一个使用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工作正常。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

Shilly已在评论中指出您不应将ES6结构传递给IE9。编写ES5或使用工具进行转换。

现在,您在libEvents中遇到的错误是奇怪的,因为libCommon根本不应该加载,因此libEvents的工厂不应该运行,因为其中一个依赖项已经不加载。可以让模块加载并且稍后会出错。但我不记得曾经在模块的立即解释代码中看到语法错误,这不仅会导致加载失败。 (您显示的代码是解释,即使以后已执行。如果您有eval(string_of_code)Function(string_of_code)那么string_of_code稍后会解释,但这不是代码中发生的事情。)我怀疑RequireJS继续执行libEvents工厂的原因与IE9中捕获加载失败的问题有关降低。 documentation建议开启enforceDefine。我会为你的代码做这个。这不会解决所有问题,但它可能有助于RequireJS更好地发现问题。

console.log也可能会给您带来麻烦,正如this question and answer所述。