What is wrong with crypto.getRandomValues in Internet Explorer 11?

时光怂恿深爱的人放手 提交于 2019-12-05 19:54:57

问题


The following code generates 3 random numbers by using window.crypto.getRandomValues. According to the developer's documentation (Microsoft MSDN and Mozilla MDN), this should work both in IE and in Chrome.

But in reality it works only in Chrome, not Internet Explorer 11. According to Microsoft, this code should work - they have given a similar code sample as the one listed below (see MSDN link above).

What is wrong? And how can it be fixed so it will work in both browsers?

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];
}
console.log(outputString);

Try this snippet in Chrome first, there it shows correctly something like

-513632982,-694446670,-254182938

as log text.

Then, copy this question's URL and try it in Internet Explorer 11 - there it is showing:

Error: { "message": "Unable to get property 'getRandomValues' of undefined or null >reference", "filename": "https://stacksnippets.net/js", "lineno": 15, "colno": 2 }

or

Error: { "message": "Script error.", "filename": "https://stacksnippets.net/js", "lineno": 0, "colno": 0 }


Some background: While trying out this code to generate Guids in Javascript, I found the issue described in this question.


(Update: According to James Thorpe's excellent answer below, I fixed the Guids in JavaScript source code.)


回答1:


According to the MDN, this feature is considered experimental in IE11. As such, it is prefixed with ms, and is 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];
}
console.log(outputString);


来源:https://stackoverflow.com/questions/44042816/what-is-wrong-with-crypto-getrandomvalues-in-internet-explorer-11

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!