Internet Explorer 11中的crypto.getRandomValues有什么问题?

时间:2017-05-18 08:43:59

标签: javascript internet-explorer window.crypto

以下代码使用 window.crypto.getRandomValues 生成3个随机数。根据开发人员的文档(Microsoft MSDNMozilla MDN),这应该适用于IE和Chrome。

但实际上它仅在Chrome中运行,而不是在Internet Explorer 11中运行。根据Microsoft的说法,此代码应该可以运行 - 它们提供了与下面列出的相似的代码示例(请参阅上面的MSDN链接) )。

有什么问题?它是如何修复的,以便在两种浏览器中都能正常工作?



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);
&#13;
&#13;
&#13;

首先在 Chrome 中尝试使用此代码段,正确显示

之类的内容
  

-513632982,-694446670,-254182938

作为日志文本。

然后,复制 this question's URL 并在 Internet Explorer 11 中进行尝试 - 在那里显示:

  

错误:{    &#34;消息&#34;:&#34;无法获得财产“getRandomValues&#39;未定义或null&gt;引用&#34;,    &#34; filename&#34;:&#34; https://stacksnippets.net/js&#34;,    &#34; lineno&#34;:15,    &#34; colno&#34;:2   }

  

错误:{    &#34; message&#34;:&#34;脚本错误。&#34;,    &#34; filename&#34;:&#34; https://stacksnippets.net/js&#34;,    &#34; lineno&#34;:0,    &#34; colno&#34;:0   }

有些背景:我想尝试 this code 在Javascript中生成 Guids ,然后我发现了这个问题。< / p>

更新:根据下面的James Thorpe's excellent answer,我修复了Guids in JavaScript源代码。)

1 个答案:

答案 0 :(得分:15)

根据the MDN,此功能在IE11中被认为是实验性的。因此,它以ms为前缀,可通过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);