仅在IE8和IE9中获取错误不在其他浏览器中

时间:2014-01-08 06:49:15

标签: javascript internet-explorer requirejs

我正在使用大量的js libs开发一个应用程序,主要使用Express JS。 所有代码都适用于Firefox和Chrome。但我在IE8和IE9中遇到错误。

SCRIPT5022: fromText eval for hbs!notification/templates/dropDown failed: SyntaxError: Syntax error in regular expression
http://requirejs.org/docs/errors.html#fromtexteval 
require.js, line 138 character 9

SCRIPT5022: fromText eval for hbs!notification/templates/dropDownItem failed: SyntaxError: Syntax error in regular expression
http://requirejs.org/docs/errors.html#fromtexteval 
require.js, line 138 character 9

SCRIPT5022: fromText eval for hbs!layouts/admin/templates/teamManagement failed: SyntaxError: Syntax error in regular expression
http://requirejs.org/docs/errors.html#fromtexteval 
require.js, line 138 character 9

SCRIPT5022: fromText eval for hbs!layouts/admin/alarms/templates/projectAlarms failed: SyntaxError: Syntax error in regular expression
http://requirejs.org/docs/errors.html#fromtexteval 
require.js, line 138 character 9

SCRIPT5022: fromText eval for hbs!admin/templates/navigation failed: SyntaxError: Syntax error in regular expression
http://requirejs.org/docs/errors.html#fromtexteval 
require.js, line 138 character 9

SCRIPT5022: fromText eval for hbs!layouts/admin/templates/base failed: SyntaxError: Syntax error in regular expression
http://requirejs.org/docs/errors.html#fromtexteval 
require.js, line 138 character 9

这些错误仅出现在IE8和IE9中。

这是我的config.js

require.config({
  paths: {
    // Require plugins
    'text': 'vendor/requirejs-text/text',
    'css': 'vendor/css/css',
    'hbs': 'vendor/require-handlebars-plugin/hbs',
    'Handlebars': 'vendor/require-handlebars-plugin/Handlebars',
    'i18nprecompile': 'vendor/require-handlebars-plugin/i18nprecompile',
    'json2': 'vendor/require-handlebars-plugin/json2',

    // Libraries
    'es5shim': 'vendor/es5-shim/es5-shim',
    'underscore': 'vendor/underscore/underscore',
    'jquery': 'vendor/jquery/jquery',
    'jquery.DatePicker': 'vendor/datepicker/datepicker',
    'jquery.mousewheel': 'vendor/jquery-mousewheel/jquery.mousewheel',
    'backbone': 'vendor/backbone/backbone',
    'backbone.virtualCollection': 'vendor/backbone-virtual-collection/backbone.virtual-collection',
    'backbone.marionette': 'vendor/backbone.marionette/backbone.marionette',
    'backbone.marionette.handlebars': 'vendor/backbone.marionette.handlebars/backbone.marionette.handlebars',
    'leaflet': 'vendor/leaflet/leaflet-src',
    'highcharts': 'vendor/highcharts/highcharts.src',
    'paper': 'vendor/paper/paper',
    'handsontable': 'vendor/handsontable/jquery.handsontable',
    'walltime': 'vendor/walltime-js/walltime',
    'walltime-data': 'vendor/walltime-js/walltime-data'
  },
  shim: {
    'underscore': {
      exports: '_'
    },
    'jquery.DatePicker': {
      deps: ['jquery']
    },
    'backbone': {
      deps: ['underscore', 'jquery'],
      exports: 'Backbone'
    },
    'backbone.marionette': {
      deps: ['backbone'],
      exports: 'Marionette'
    },
    'backbone.virtualCollection': {
      deps: ['backbone', 'underscore']
    },
    'leaflet': {
      exports: 'L'
    },
    'highcharts': {
      deps: ['jquery'],
      exports: 'Highcharts'
    },
    'walltime': {
      deps: ['walltime-data']
    }
  },
  hbs: {
    i18nDirectory: 'i18n/',
    disableI18n: false,       // This disables the i18n helper and
                              // doesn't require the json i18n files (e.g. en_us.json)
                              // (false by default)

    disableHelpers: true,     // When true, won't look for and try to automatically load
                              // helpers (false by default)

    helperPathCallback:       // Callback to determine the path to look for helpers
      function (name) {       // ('/template/helpers/'+name by default)
        return 'cs!' + name;
      },

    compileOptions: {}        // options object which is passed to Handlebars compiler
  }
});

请帮帮我们!

----- 更新 -----

我在要求回购的 Github 上发布此问题。
你可以找到它here
根据评论,IE9中的问题似乎与 eval 有关 我还尝试按照here提出eval("("+text+")"),但仍然无效。

任何人都可以告诉我如何在IE9中使用这个eval的东西。

由于

3 个答案:

答案 0 :(得分:3)

这是我的问题,可能是你的问题:

//IE with conditional comments on cannot handle the
//sourceURL trick, so skip it if enabled.
/*@if (@_jscript) @else @*/
if (!config.isBuild) {
    text += "\r\n//@ sourceURL=" + path;
}
/*@end@*/
如果源URL位于传递给eval的文本的末尾,IE将会出现语法错误。

答案 1 :(得分:1)

@ jsfellow的答案非常有帮助! 显示的片段位于require-handlebars-plugin的hbs.js中。 根据{{​​3}},

//# sourceURL=

优先于

//@ sourceURL=

在我更改了hbs.js中的相应行之后,所有测试的浏览器(google chrome 35,firefox 30,IE 8-10)都按预期工作。 我在sourcemap proposal提交了拉取请求,该请求目前正在合并和评估。

我希望这可以帮助任何可能遇到同样问题的人。

答案 2 :(得分:0)

这似乎与JQuery中发生的类似问题有关。

这完全是关于DOM没有准备就绪,因为DOM没有完全加载,就会发生这个错误。

如果您还没有这样做,请尝试在结束页面或某种延迟加载时添加脚本:

http://www.joezimjs.com/javascript/lazy-loading-javascript-with-requirejs/ 如何使用RequireJS实现延迟加载? 顺便说一句,只有这方面的帖子似乎微软否认它并不认为它是一个错误:

https://connect.microsoft.com/IE/feedback/details/792880/document-readystat