[英]What is wrong with crypto.getRandomValues in Internet Explorer 11?
以下代碼使用window.crypto.getRandomValues
生成 3 個隨機數。 根據開發人員的文檔(Microsoft MSDN和Mozilla MDN ),這應該在 IE 和 Chrome 中都有效。
但實際上它只適用於 Chrome,而不適用於 Inte.net 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);
首先在Chrome中嘗試這個片段,它會正確顯示類似
-513632982,-694446670,-254182938
作為日志文本。
然后,復制此問題的 URL並在Inte.net Explorer 11中嘗試 - 它顯示:
錯誤:{“消息”:“無法獲取未定義或 null > 參考”的屬性“getRandomValues”,“文件名”:“https://stacksnippets.net/js”,“lineno”:15,“colno”:2 }
或者
錯誤:{“消息”:“腳本錯誤。”,“文件名”:“https://stacksnippets.net/js”,“lineno”:0,“colno”:0}
一些背景:在Javascript 中嘗試使用此代碼生成 Guid 時,我發現了此問題中描述的問題。
更新:
根據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);
getRandomValues
function 僅在 Inte.net Explorer 11 中受支持。我必須在 web 頁面的 header 部分添加以下元標記,以允許 Inte.net Explorer 選擇應使用哪個版本的 IE 呈現頁面。
<meta http-equiv="X-UA-Compatible" content="IE=11">
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.