Ada beberapa fitur HTML5 baru yang telah membuatnya menjadi browser terbaru yang memungkinkan negara berbagi di antara tab, jendela browser, jendela domain yang sama, dll. Jadi mungkin akan sedikit lebih mudah untuk menulis aplikasi web yang membuat banyak status pada klien dan juga mengelola negara secara cerdas antara tab dan / atau windows.
Saat ini ada perpustakaan seperti Backbone.js yang dapat membantu mengelola status dalam satu tab atau satu jendela. Apakah ada sesuatu di luar sana yang membantu dengan banyak tab (atau windows) yang mengelola keadaan global, keadaan spesifik tab, dan acara lintas-tab tanpa mengandalkan server untuk menyinkronkan semuanya?
HTTP is great (and beutiful) because it is stateless
. Sejak saya bergabung dengan industri, saya mencari beuty itu tetapi tidak bisa menemukannya. Semua orang hanya berbicara tentang mempertahankan status yang Anda lihat!Jawaban:
Jawaban singkat:
Anda tidak dapat benar - benar menyampaikan informasi status dari satu tab ke tab lainnya ...
Jawaban panjang:
Anda tidak dapat benar - benar menyampaikan informasi status dari satu tab ke tab lainnya, karena ini akan menjadi pelanggaran yang sangat parah pada sandboxing dan keamanan.
Anda dapat, bagaimanapun, secara tidak langsung melewati dua tab dengan cara:
Pilihan lain adalah dengan hanya berkomunikasi melalui cookie untuk menyampaikan informasi antara 2 tab, tetapi ini kemungkinan besar akan menyebabkan masalah, sangat tergantung pada browser dan memerlukan pemuatan ulang halaman (dan sejujurnya saya belum pernah mencobanya dan hanya memikirkannya, tetapi yang lain telah dilakukan itu ) .
Jadi, karena ekstensi peramban jelas merupakan jalur yang cukup membatasi, Anda harus mengikuti komunikasi klien-server dan mengembangkan sistem untuk memungkinkan klien mempublikasikan acara ke server, yang kemudian mengirimkannya kembali (atau jenis siaran lainnya) ke klien lain melalui protokol komunikasi pilihan Anda.
Pembaruan 1: Seperti seseorang yang disebutkan dalam komentar sebelum menghapusnya (tidak dapat memberikan kredit karena tidak ditampilkan di kotak masuk, maaf)
HTML5 memperkenalkan
window.postMessage
API.Untuk contoh yang berfungsi, lihat posting blog John Resig di Cross-Window Messaging . Dan sangat menarik, jika Anda melihat komentar di posting ini Anda akan melihat seseorang bernama Malte yang menyebutkan perpustakaan yang mereka gunakan untuk menggunakan
window.postMessage
browser modern, atau versi berbasis cookie pada browser lama.Baca ini untuk detail dan contoh lebih lanjut:
window.postMessage
halaman,window.postMessage
window.postMessage
dengan tautan tambahan.Pembaruan 2:
Perlu diingat bahwa, seperti 2012-03-04, spesifikasi HTML5 masih berupa konsep, sehingga beberapa fitur dapat dihapus . Jadi gunakan dengan hati-hati ...
sumber
Baru-baru ini saya menemukan Intercom , yang menggunakan penyimpanan lokal untuk mengimplementasikan pesan siaran antar windows. Penyimpanan lokal mengaktifkan suatu peristiwa (
onstorage
) ketika data berubah, jadi tidak diperlukan polling. Interkom memungkinkan semua halaman pada suatu domain untuk berkomunikasi, terlepas dari bagaimana mereka dibuka.sumber
Jika windows (halaman) Anda berasal dari domain yang sama (asal),
localStorage
dapat digunakan untuk berbagi data dan untuk menyiarkan pesan. Satu hal yang harus Anda pertimbangkan adalah bahwa setiap jendela browser (halaman) berfungsi di utas terpisah. Jadi, jika kita berbicara tentang komunikasi lintas jendela, kita juga berbicara tentang multithreading.Anda juga harus mempertimbangkan beberapa
localStorage
masalah dengan IE:Saya telah melakukan beberapa tes untuk localStorage di IE8. Setelah beberapa ribu perubahan ke penyimpanan lokal, jendela dari asal yang sama berhenti menerima acara 'penyimpanan'. Terlebih lagi, maka Anda mencoba membaca dari item Penyimpanan lokal yang sama, nilai mungkin berbeda di jendela yang berbeda. Jadi, saya akan mengatakan bahwa IE8 tidak mendukung localStorage
IE9 dan IE10 memanggil event handler 'storage' bahkan jika localStorage diubah dari jendela ini ( ini bertentangan dengan spesifikasi ).
Ada juga masalah yang diketahui dengan IE11 .
Saya baru-baru ini menerbitkan perpustakaan komunikasi interwindow (semua fitur dijelaskan dalam readme). Ini menyediakan berbagi data yang aman, siaran acara. Ini juga memecahkan beberapa masalah IE (IE8 jelas tidak didukung, IE11 bug dengan iframe di dalam induk asal yang berbeda dapat diselesaikan hanya dengan memperbaiki IE - menunggu pembaruan IE11).
sumber