Qu'est-ce qui ne va pas avec crypto.getRandomValues ​​dans Internet Explorer 11?

Le code suivant génère 3 nombres aléatoires en utilisant window.crypto.getRandomValues . Selon la documentation du développeur ( Microsoft MSDN et Mozilla MDN ), cela devrait fonctionner à la fois dans IE et Chrome.

Mais en réalité, cela fonctionne uniquement dans Chrome, et non sur Internet Explorer 11. Selon Microsoft, ce code devrait fonctionner: ils ont donné un exemple de code similaire à celui ci-dessous (voir le lien MSDN ci-dessus).

Qu'est-ce qui ne va pas? Et comment peut-il être réparé afin qu'il fonctionne dans les deux navigateurs?

 var randomValuesArray = new Int32Array(3); var crypto = window.crypto; crypto.getRandomValues(randomValuesArray); var outputString = ""; for (var i = 0; i < randomValuesArray.length; i++) { if (i > 0) outputString += ","; outputString += randomValuesArray[i]; } alert(outputString); 

Essayez cet extrait dans Chrome d' abord, là-bas, il montre correctement quelque chose comme

-513632982, -694446670, -254182938

Dans un popup d'alerte, puis copiez l'URL de cette question et essayez-la dans Internet Explorer 11 – là, elle montre:

Erreur: {"message": "Impossible d'obtenir la propriété" getRandomValues ​​"de indéfinie ou nulle> référence", "nom de fichier": " https://stacksnippets.net/js ", "lineno": 15, "colno": 2 }


Quelques antécédents: je voulais essayer ce code pour générer Guids en Javascript, alors j'ai trouvé ce problème.

Selon le MDN , cette fonctionnalité est considérée comme expérimentale dans IE11. En tant que tel, il est préfixé avec ms et est accessible via window.msCrypto :

 var randomValuesArray = new Int32Array(3); var crypto = window.crypto || window.msCrypto; crypto.getRandomValues(randomValuesArray); var outputString = ""; for (var i = 0; i < randomValuesArray.length; i++) { if (i > 0) outputString += ","; outputString += randomValuesArray[i]; } alert(outputString);