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);