Сравнение строк в 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
, надеюсь, будет исправлено в будущем.