◆ タブ

この記事を書いていたときに そういえば sessionStorage のセッションってどういう動きなのかイマイチよくわかってないと思って調べてみました


ひとことでまとめると セッション=タブ です

確認したのは Chrome と Firefox のみです


ライフサイクル

新しいタブを作ると新規セッションとして空の sessionStorage が用意されます
別のタブで同じページを開いても sessionStorage の値は別々です
sessionStorage のデータはそのタブが閉じられるまで有効で 閉じるとデータも消えます
タブを開いてる限り 別オリジンに行って戻ってきてもデータは残っています

ブラウザのタブの復元を使うと sessionStorage も復元されるようですが 拡張機能で単純に最後に閉じたタブの URL を新規タブで開く作りになっていた場合には復元されません

WebStorage なので同じセッションでも保存はオリジンごとに行われます

別タブ

target="_blank" など target を指定して別タブで開いた場合は 元タブの sessionStorage のデータがコピーされて引き継がれます
コピーなので一方を変更してももう一方に影響はしません

タブのクローンでもコピーされて引き継がれます

ユーザ操作の別タブ

別タブで開くと言っても 右クリックで別タブで開くを選んだり ミドルクリックで開いた場合は引き継がれません
内部的には「新規タブを」リンク先の URL で開いた扱いです

ミドルクリックしてしまうと target があっても引き継がれなくなるので タブの開き方で動きが違うということになる場合もあります

iframe

同じタブであれば iframe 内でも sessionStorage は共有です
フレーム内で sessionStorage のデータを変更すればトップフレームの sessionStorage のデータも変更されます

プロセス

Chrome では target で別タブを開いたりタブのクローンをすると同じプロセスになります
ミドルクリックなどで別タブを開くと別プロセスです
なので 同じプロセスなら sessionStorage がコピーされたものと言えます
タスクマネージャで見た場合に ● が縦につながっているところです