した。
エラーになるコード
const { JSDOM } = require('jsdom'); const sinon = require('sinon'); const dom = new JSDOM(); dom.window.localStorage.setItem('foo', 'bar'); // SecurityError: localStorage is not available for opaque origins
解決
new JSDOM()
のところで、 url
を適当に設定してやれば解決します。
const dom = new JSDOM('', { url: 'https://localhost' });
原因
件の url
の初期値が about:blank
で、URLがそれだと localStorage
が駄目なので。
試しにブラウザーで about:blank を開いてコンソールから localStorage
を触ろうとしても同じようなエラーが出ます。
MDNに説明があります。
例外
SecurityError
- リクエストがポリシーの決定に反している、またはオリジンが妥当な scheme/host/port tupleでない (これは例えば、オリジンが
file:
やdata:
スキームを使うときに起こります)。例えば、ユーザーがブラウザー設定で特定オリジンへのデータ永続化のパーミッションを拒否していることもあります。