Mat*_*att 10 javascript internet-explorer window.crypto
以下代码使用生成3个随机数window.crypto.getRandomValues.根据开发人员的文档(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);Run Code Online (Sandbox Code Playgroud)
首先在Chrome中尝试使用此代码段,它会正确显示类似的内容
-513632982,-694446670,-254182938
在警报弹出窗口中.
然后,复制此问题的URL并在Internet Explorer 11中尝试- 它显示:
错误:{"message":"无法获取属性'getRandomValues'未定义或null>引用","filename":" https://stacksnippets.net/js ","lineno":15,"colno":2 }
一些背景:我想尝试使用这个代码在Javascript中生成Guids,然后我发现了这个问题.
(更新:根据James Thorpe下面的优秀答案,我在JavaScript源代码中修复了Guids.)
Jam*_*rpe 22
根据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);Run Code Online (Sandbox Code Playgroud)