以下代码使用 window.crypto.getRandomValues
生成3个随机数。根据开发人员的文档(Microsoft MSDN和Mozilla 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;
首先在 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源代码。)
答案 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);