ReferenceError window is not defined
Author: 水卜
Author: 水卜
Nuxt.jsでDOM操作していたらReferenceError window is not defined
とエラー。
Nuxt.jsがvueファイルをサーバーサイドでレンダリングした時、node.jsの世界にはwindowもdocumentも存在しないため、こんなエラーが出る。
とりあえず以下の2通りで対処することとした。
プロセスがブラウザの時のみ実行するようにする。
if (process.browser) {
document.getElementById('');
}
mountedはDOMが作成された直後に呼ばれるため、documentが存在する。
要素の取得も追加もできる。
mounted: () => {
const hs = [
...document.getElementsByTagName('h2'),
...document.getElementsByTagName('h3'),
...document.getElementsByTagName('h4'),
];
for (const h of hs) {
const id = encodeURIComponent(h.textContent);
h.setAttribute('id', id);
}
},