Сравнение строк в Locale не работает должным образом в веб-рабочем приложении расширения Firefox

Функция localeCompare() не ведет себя одинаково в основном коде расширения Firefox и в веб-рабочем (или хромированном рабочем).

Например, в главном коде у меня есть этот код:

var array = ["École", "Frère", "frère", "école"];
array.sort(function(a, b) {
    return a.localeCompare(b);
});

console.log('Main: ' + array);

он показывает:

Main: �cole,�cole,Fr�re,fr�re

Какая правильная сортировка (кодировка не является моей проблемой).

В рабочем случае у меня есть этот код:

var array = ["École", "Frère", "frère", "école"];
array.sort(function(a, b) {
    return a.localeCompare(b);
});

self.postMessage(array);

он печатает:

Frère,frère,école,�0cole

который находится в неправильном порядке (еще раз, кодирование не является моей проблемой).

Сортировка в основном коде в порядке, но не в веб-работнике.

Я попытался изменить параметры функции localeCompare() в веб-работнике, но ничего не изменил.

Почему сортировка отличается от веб-работника и как ее правильно использовать в веб-работнике?

(По какой-то причине я не мог отправить данные в основной код, выполнить сортировку и отправить ее веб-работнику. У меня все еще есть неправильный порядок (дает мне école,�0cole,Frère,frère).)

Спасибо за вашу помощь.

Ответы

Ответ 1

localeCompare по-прежнему не работает в веб-мастерах Firefox. Владимир упомянул Bug 616841, который действительно фиксировал его почти везде... за исключением веб-работников, которые были оставлены сломанными, потому что Intl-бэкэнд был (есть? ) не потокобезопасными, а также некоторыми другими проблемами безопасности потоков. Соответствующий патч "Dead end" никогда не просматривался и не проверялся.

Я теперь подал Ошибка 903780 с тестовым примером на основе вашего кода, так что localeCompare, надеюсь, будет исправлено в будущем.