kenju's blog

About Programming, Mathematics, Security and Blockchain

Railsで特定のURLにアクセスしたときにJS側でLocalStorage消去をしたい

tl;dr

  • Railsで特定のURLにアクセスしたときにJS側でLocalStorage消去をしたいときの実装例
  • より汎用的に言うと、JS側でしか処理できない任意のロジックをRailsアプリケーションへのリクエストのタイミングでどのように呼び出すかと言う話

考え方

  • Rails側でJSの処理を呼び出すには。。。」などの難しいことを考えずない
  • JS側でしか実装できない処理は、Viewが読み込まれたときに:javascriptタグ内で実行してあげる
  • JS側での処理が終わった後、window.location.assignで任意のURLにリダイレクトしてあげれば良い

実装例

routes.rb:

get '/reset_state' => 'reset_controller#reset'

app/controllers/reset_controller:

class ResetController < ApplicationController
  def reset
    # 例えば、クッキーも削除したい場合は、Rails側でハンドリングしてあげれば良い
    cookies.delete(:teams, domain: :all)
  end
end

app/views/reset_controller/reset.html.haml:

このファイルがポイント。:javascriptタグ内でJS側で実行したい処理を呼び出した後で、window.location.assignでリダイレクトしてあげる。

:javascript
  try {
    localStorage.clear();
    sessionStorage.clear();
  } catch (e) {
    // do nothing
  }

  window.location.assign("#{root_path}");