Я пишу функцию, которая берет текст из файла и проверяет текст. Он работает гладко в 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.info("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.info("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.info("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
.
Вы используете синтаксис метода:
{
url: "http://example.com/example.txt",
test(data) // <==== here
{
// ...
}
}
Это было добавлено в ES2015. IE11 не поддерживает его (ни одна версия IE не поддерживает), но современные браузеры поддерживают. (Я не думаю, что IE11 поддерживает какой-либо из ES2015 должным образом, поскольку он был выпущен в 2013 году, и Microsoft не добавляет функции в существующие выпуски IE. Он имеет let
, но семантика неверна в циклах for
.)
Как вы обнаружили, ответ заключается в использовании вместо этого инициализатора свойства:
{
url: "http://example.com/example.txt",
test: function(data)
// -----^^^^^^^^^^
{
// ...
}
}
Или, конечно, написать современный JavaScript и использовать транспилятор, такой как Вавилон, для преобразования кода в ES5 (возможно, с полифиллами) для IE.