From 21728dc49e89cd99bf789f30a4d2306c5fc7b309 Mon Sep 17 00:00:00 2001 From: Vitaly Baev Date: Thu, 5 May 2022 03:24:30 +0400 Subject: [PATCH] Update IE polyfill to fix last improve with reduce (#362) --- README.md | 19 +++++++++++++++++-- README.ru.md | 19 +++++++++++++++++-- README.zh-CN.md | 15 ++++++++++++++- 3 files changed, 48 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index d3ed1f88..f4c8c135 100644 --- a/README.md +++ b/README.md @@ -327,12 +327,27 @@ the same result. ### IE If you support IE, you need to [transpile `node_modules`] by Babel -and add `crypto` alias: +and add `crypto` alias. Moreover, `UInt8Array` in IE actually +is not an array and to cope with it, you have to convert it to an array +manually: ```js // polyfills.js -if (!window.crypto) { +if (!window.crypto && window.msCrypto) { window.crypto = window.msCrypto + + const getRandomValuesDef = window.crypto.getRandomValues + + window.crypto.getRandomValues = function (array) { + const values = getRandomValuesDef.call(window.crypto, array) + const result = [] + + for (let i = 0; i < array.length; i++) { + result[i] = values[i]; + } + + return result + }; } ``` diff --git a/README.ru.md b/README.ru.md index 4b489e77..91c2ab91 100644 --- a/README.ru.md +++ b/README.ru.md @@ -335,12 +335,27 @@ const nanoid = customRandom(urlAlphabet, 10, random) ### IE Если вам нужна поддержка IE, потребуется включить [компиляцию `node_modules`] -с помощью Babel и вручную убрать вендорный префикс у `crypto`. +с помощью Babel и вручную убрать вендорный префикс у `crypto`. Кроме того, +из-за того, что `UInt8Array` в IE является массивом, необходимо преобразовать +метод `getRandomValues`, чтобы он возвращал массив: ```js // polyfills.js -if (!window.crypto) { +if (!window.crypto && window.msCrypto) { window.crypto = window.msCrypto + + const getRandomValuesDef = window.crypto.getRandomValues + + window.crypto.getRandomValues = function (array) { + const values = getRandomValuesDef.call(window.crypto, array) + const result = [] + + for (let i = 0; i < array.length; i++) { + result[i] = values[i]; + } + + return result + }; } ``` diff --git a/README.zh-CN.md b/README.zh-CN.md index 34ed1ede..af577497 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -311,8 +311,21 @@ const nanoid = customRandom(urlAlphabet, 10, random) ```js // polyfills.js -if (!window.crypto) { +if (!window.crypto && window.msCrypto) { window.crypto = window.msCrypto + + const getRandomValuesDef = window.crypto.getRandomValues + + window.crypto.getRandomValues = function (array) { + const values = getRandomValuesDef.call(window.crypto, array) + const result = [] + + for (let i = 0; i < array.length; i++) { + result[i] = values[i]; + } + + return result + }; } ```