我正在编写一个从文件中获取文本并测试文本的函数。它可以在Chrome上顺利运行,但不能在IE上运行?从网上可以找到的信息中,IE应该支持我正在使用的所有内容。当我在IE上运行它时,它在每个test(data)
当前代码:
function testText(callback)
{
const filePaths =
[
{
url: "http://example.com/example.txt",
test(data)
{
const compareText = data.localeCompare(trigger, "en", {sensitivity: "base"});
if (compareText == 0)
{
globalNotifEnabled = true;
return true;
}
return false;
}
},
{
url: "http://www.example.com/UserExceptions.txt",
test(data)
{
const rawUsers = data;
const userExceptions = rawUsers.split(';');
if (userExceptions.indexOf(currentUser) > -1)
{
console.log("User exception is: " + userExceptions[userExceptions.indexOf(currentUser)]);
return false;
}
return true;
}
},
{
url: "http://www.example.com/test/notification.txt",
test(data)
{
globalNotification = data;
notify(globalNotification);
console.log("Global notification displayed.");
return true;
}
}
];
(function getFiles(currentStage)
{
$.get(filePaths[currentStage].url, function(data)
{
if (filePaths[currentStage].test(data))
{
if (filePaths.length > currentStage + 1) getFiles(currentStage + 1)
else callback(null, "Success!")
}
else callback(Error(`Stage ${currentStage}'s test failed.`, null))
}, 'text')
.fail(function()
{
console.log("Global notifications failed at stage: " + currentStage);
});
})(0);
}
是否有理由让Chrome浏览器允许我访问test(data)
但IE要求我输入类似blah: function test(data)
的内容?我尝试修改对象,使其看起来像:
url: "http://example.com/example.txt",
setTest: function(test(data))
{
const compareText = data.localeCompare(trigger, "en", {sensitivity: "base"});
if (compareText == 0)
{
globalNotifEnabled = true;
return true;
}
return false;
}
...并在getFiles
函数中调用它,例如:
if (filePaths[currentStage].setTest)
...
它不会在IE中引发错误,但实际上并没有在getFiles
部分中使用我需要的功能。
答案 0 :(得分:1)
您正在使用method syntax:
{
url: "http://example.com/example.txt",
test(data) // <==== here
{
// ...
}
}
这已在ES2015中添加。 IE11不支持(没有IE版本),但是现代浏览器支持。 (我认为IE11不正确支持ES2015的任何版本,因为它于2013年发布,并且Microsoft并未在IE的现有版本中添加功能。它具有let
,但是{{1}中的语义是错误的}循环。)
正如您所发现的,答案是使用属性初始化程序:
for
或者,当然,编写现代JavaScript并使用Babel之类的编译器将IE的代码转换为ES5(也许使用polyfills)。