Saya memiliki beberapa nilai di situs saya yang ingin saya hapus ketika browser ditutup. Saya memilih sessionStorage
untuk menyimpan nilai-nilai itu. Ketika tab ditutup mereka memang dihapus, dan disimpan jika pengguna menekan f5; Tetapi jika pengguna membuka beberapa tautan di tab berbeda nilai-nilai ini tidak tersedia.
Bagaimana saya bisa berbagi sessionStorage
nilai antara semua tab browser dengan aplikasi saya?
Kasing penggunaan: masukkan nilai di beberapa penyimpanan, pertahankan nilai itu dapat diakses di semua tab peramban dan hapus jika semua tab ditutup.
if (!sessionStorage.getItem(key)) {
sessionStorage.setItem(key, defaultValue)
}
javascript
cross-browser
session-storage
Vladimir Gordienko
sumber
sumber
Jawaban:
Anda dapat menggunakan localStorage dan eventListener "penyimpanan" untuk mentransfer data sessionStorage dari satu tab ke tab lainnya.
Kode ini harus ada di SEMUA tab. Itu harus dijalankan sebelum skrip Anda yang lain.
Saya menguji ini di chrome, ff, safari, yaitu 11, yaitu 10, ie9
Metode ini "harus bekerja di IE8" tetapi saya tidak dapat mengujinya karena IE saya macet setiap kali saya membuka tab .... sembarang tab ... di situs web mana pun. (IE IE bagus) PS: Anda jelas perlu menyertakan JSON shim jika Anda ingin dukungan IE8 juga. :)
Kredit diberikan untuk artikel lengkap ini: http://blog.guya.net/2015/06/06/sharing-sessionstorage-between-tabs-for-secure-multi-tab-authentication/
sumber
BroadcastChannel
sekarang menjadi alat yang baik untuk melakukan ini. developers.google.com/web/updates/2016/09/broadcastchannelMenggunakan
sessionStorage
untuk ini tidak mungkin.Dari Dokumen MDN
Itu berarti Anda tidak dapat berbagi di antara tab, karena ini yang harus Anda gunakan
localStorage
sumber
path='/'
sehingga memaksa untuk menghapus ketika jendela browser ditutup. Tetapi untuk tab, saya tidak tahu sekarang.localStorage
data terjadi karena seseorang menavigasi ke domain yang berbeda, di tab yang sama. Menurut saya ini akan menghapuslocalStorage
data secara tidak benar - tab tidak ditutup, dan jika orang tersebut menavigasi kembali, ia akan menginginkan data itu lagi, benar. Bagaimanapun, ini pendekatan yang menarik, tidak memikirkan itu: -)Anda bisa menggunakan
localStorage
dan mengingat tanggal pertama kali dibuatsession cookie
. KetikalocalStorage
"sesi" lebih tua dari nilai cookie maka Anda dapat menghapuslocalStorage
Kontra dari hal ini adalah seseorang masih dapat membaca data setelah browser ditutup sehingga ini bukan solusi yang baik jika data Anda bersifat pribadi dan rahasia.
Anda dapat menyimpan data Anda
localStorage
selama beberapa detik dan menambahkan pendengar acara untuk suatustorage
acara. Dengan cara ini Anda akan tahu kapan salah satu tab menulis sesuatu kelocalStorage
dan Anda dapat menyalin kontennya kesessionStorage
, lalu hapus sajalocalStorage
sumber
Sebenarnya melihat area lain, jika Anda membuka dengan _blank itu menjaga sessionStorage selama Anda membuka tab ketika induknya terbuka:
Di tautan ini, ada jsfiddle yang bagus untuk mengujinya. sessionStorage di jendela baru tidak kosong, ketika mengikuti tautan dengan target = "_ blank"
sumber
Solusi saya untuk tidak memiliki sessionStorage yang dapat dipindahtangankan melalui tab adalah membuat Profil lokal dan menghapus variabel ini. Jika variabel ini disetel tetapi variabel sessionStorage saya tidak berjalan dan menginisialisasi ulang mereka. Ketika pengguna keluar dari jendela, hancurkan variabel localStorage ini
sumber
Berikut adalah solusi untuk mencegah sesi geser antara tab browser untuk aplikasi java. Ini akan berfungsi untuk IE (JSP / Servlet)
1) JS halaman pertama
2) JS umum untuk semua halaman
3) web.xml - pemetaan servlet
4) kode servlet
sumber