#javascript #internet-explorer
#javascript #internet-explorer
Вопрос:
Я пишу функцию, которая извлекает текст из файла и проверяет текст. Он работает плавно в Chrome, но не в IE? Из того, что я могу найти в Интернете, IE должен поддерживать все, с чем я работаю. Когда я запускаю его в IE, он выдает ошибку «Expected ‘:'» в конце каждого 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
части.
Ответ №1:
Вы используете синтаксис метода:
{
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 и используйте транспилятор, такой как Babel, для преобразования кода в ES5 (возможно, с полизаполнениями) для IE.