過去ネタ供養 3 : ページ読み込み時に必ず初期処理の関数を実行する JS コード片
この過去記事の中で、ページ内のルート相対パスを絶対パスに書き換える強引な JavaScript コードを書いて紹介している。そのコードの中で使っている関数の抜粋。
この JS がどんなタイミングで読み込まれても、exec()
関数を必ずページ読み込み時に実行するというコードスニペットだ。
(() => {
// 初期処理としてやりたいことを実装しておく
const exec = () => {
console.log('Something');
};
if(!document.readyState || document.readyState === 'interactive') {
console.log('Interactive (onload)');
window.addEventListener('load', exec);
}
else if(document.readyState === 'loading') {
console.log('DOMContentLoaded');
document.addEventListener('DOMContentLoaded', exec);
}
else {
console.log('Immediately');
exec();
}
})();
この JS ファイルの読み込み方によっては、JS ファイルの読み込み完了時点で DOMContentLoaded
イベントが終わっていて、document.addEventListener('DOMContentLoaded')
でイベント登録しても発火しないことがあったりする。
そこで document.readyState
を見て、イベント登録するか、その場で実行するか、といったハンドリングをしているというワケ。