2017-05-18 10 views
3

次のコードは、window.crypto.getRandomValuesを使用して3つの乱数を生成します。開発者のドキュメント(Microsoft MSDNMozilla MDN)によると、これはIEとChromeの両方で動作するはずです。Internet Explorer 11のcrypto.getRandomValuesで何が問題になっていますか?

実際にははChromeでのみ動作し、Internet Explorer 11では動作しません。マイクロソフトによれば、このコードは動作するはずです。以下にリストされたものと同様のコードサンプルが用意されています。

どうしたのですか?両方のブラウザでどのように動作するようにするにはどうすれば固定できますか?

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]; 
 
} 
 
alert(outputString);

最初Chromeでをこのスニペットを試してみてください、そこには、this question's URLをコピーし、それを試し、正しく警告ポップアップで

-513632982,-694446670,-254182938

のようなものを示していますInternet Explorer 11 - それがあります表示されています

Error: { "message": "Unable to get property 'getRandomValues' of undefined or null >reference", "filename": " https://stacksnippets.net/js ", "lineno": 15, "colno": 2 }


いくつかの背景:私は、JavaScriptでGUIDを生成するthis codeを試してみたかったし、私はこの問題を発見しました。

+0

はテストするIEが手元にありませんが、多分それは互換モードのことですか? (編集:ああ、そうではない、それはStackスニペットで実行されているので) –

+0

はい、私は自分のPCにChromeとIE 11の両方をインストールしました。 – Matt

+0

私が応答している間にMDNへのリンクを編集しました。そのページの最初の行にIE11でそれを保持する方法が示されています –

答えて

5

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]; 
 
} 
 
alert(outputString);

関連する問題