下面的代码通过使用生成 3 个随机数window.crypto.getRandomValues
。根据开发人员的文档(Microsoft MSDN和Mozilla MDN),这应该可以在 IE 和 Chrome 中使用。
但实际上它只适用于 Chrome,而不适用于 Internet Explorer 11。根据微软的说法,这段代码应该可以工作——他们给出了与下面列出的代码示例类似的代码示例(参见上面的 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);
首先在Chrome中尝试此代码段,它会正确显示类似
-513632982,-694446670,-254182938
作为日志文本。
然后,复制这个问题的 URL并在Internet Explorer 11中尝试- 它显示:
错误:{“消息”:“无法获取未定义或 null >reference 的属性 'getRandomValues'”、“文件名”:“https://stacksnippets.net/js”、“lineno”:15、“colno”:2 }
或者
错误:{“消息”:“脚本错误。”,“文件名”:“https://stacksnippets.net/js”,“lineno”:0,“colno”:0 }
一些背景:在尝试使用此代码在 Javascript中生成Guid 时,我发现了此问题中描述的问题。
更新:
- 根据下面James Thorpe 的出色回答,我在 JavaScript源代码中修复了 Guid。
- Microsoft 的较新浏览器(例如 Edge 版本 96.0.1054.43)不再显示此问题。但是使用下面提供的答案来保持最佳兼容性仍然很好。