WebCrypto API (window.crypto.subtle)が'undefined'になって悩んで色々調べたら
WebCrypto APIは「Secure Contexts」でないと使えないとのことだった。
#詳細
MDN:
WebCrypto APIが非安全なコンテキストで使用できないことを問題にする話は、
chromiumやらFireFoxのIssueに出てくるが
既にW3Cで決めていることらしいのでそこを変えない限りは各ブラウザは仕様通りということなので正常な動作。
このコメントみたいに社内システムで使おうとして、引っ掛かりました。
MDNには上記の通り「安全なコンテキストに制限されている機能」のページはあるのだけど、
「WebCrypto API」のページには書いていないのではまり期間が長くなってしまった。
【追記】
英語版のCrypto/subtleにはでかでかと書いてあるが、日本語版だと消えている。
##Secure Contextsとは
これを読めばいいけど雑に言うと、
「httpsかwssもしくはホストが自分自身(アドレスが127.0.0.1/8(ip6だと::1/128)かfile://」ならSecure Contexts。
localhost(127.0.0.1)で動くからって別サーバーに置いたとたんに動かなくなるとか起こる(起きた)。
#おまけ
これが原因だったかわからないが、こんなことが調べている最中に見つかったりした
おまけ2(2022/2/10追記)
MDN英語版だとCrypto.subtleページの先頭に"Secure contextじゃないと使えないぞ"って注意書きが出てきてくれる。
残念ながら日本語版だと書いていない。