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