我正在使用大量的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的东西。
由于
答案 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