簡體   English   中英

Inte.net Explorer 11 中的 crypto.getRandomValues 有什么問題?

[英]What is wrong with crypto.getRandomValues in Internet Explorer 11?

以下代碼使用window.crypto.getRandomValues生成 3 個隨機數。 根據開發人員的文檔(Microsoft MSDNMozilla 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 時,我發現了此問題中描述的問題。


更新:

  • 根據下面James Thorpe 的出色回答,我修復了JavaScript源代碼中的 Guid。
  • Microsoft 的較新瀏覽器(如 Edge Version 96.0.1054.43)不再顯示此問題。 但最好使用下面提供的答案來保持最佳兼容性。

根據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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM