Railsで
$(windows).on('load', function(){...})
ではなく
$(document).on('turbolinks:load', function(){...})
とすることで期待通り発火してくれるようになることがありますが、その理由の備忘録です。
前提
Ruby: 2.7.2
Rails: 6.1.6
gem: turbolinks 5.2.1
理由
turbolinksではページ遷移を高速化してくれますが、仕組みとしてはブラウザでページ遷移が起きた時に
- head内で差異があればマージ
- bodyタグを差し替え
することで、同ページ内であたかも画面遷移が起きているように見せています。
実際にはページ遷移が起きていないため、ページ遷移が発火条件の$(windows).on('load', function(){...})
は発火しません。
なので、turbolinksを使用する場合のページ遷移は、turbolinksで用意されたロードイベントturbolinks:load
を使用する必要があります。