Daha yeni tarayıcılar için birden çok tarayıcı sekmesini ve istemci durumunu ele alan açık kaynaklı JavaScript kitaplıkları var mı? [kapalı]


11

Sekmeler, tarayıcı pencereleri, aynı etki alanı pencereleri, vb. Arasında durumu paylaşmaya izin veren son tarayıcılara dönüştüren birkaç yeni HTML5 özelliği vardır. Bu nedenle, istemciyi ve ayrıca sekmeler ve / veya pencereler arasında durumu akıllı bir şekilde yönetir.

Şu anda Backbone.js gibi, tek bir sekmede veya tek bir pencerede durumun yönetilmesine yardımcı olabilecek kütüphaneler vardır. Bunların hepsini eşitlemek için sunucuya güvenmeden birden çok sekmenin (veya pencerenin) genel durumu, sekmeye özgü durumu ve çapraz sekme olayını yönetmesine yardımcı olan bir şey var mı?


2
Bazı web uygulamaları (örn. Trello), aynı tarayıcıda olsun veya olmasın, tüm istemcileri senkronize etmek için sadece WebSockets kullanarak bunu atlıyor. Ancak bu yararlı olabilir. Eğer böyle bir kütüphane yazıyordum, SharedWorkers için burada bir çok şey yapar, ancak henüz iyi desteklenmediğinden, SharedWorkers için bir çoklu dolgu üzerinde ince bir katman yapardım. Bu çalışmayı elde etmek için bir kesmek, sekmeler bağımsız olarak açıldığında bile tetiklenen localStorage olaylarıdır.
mahemoff

1
Üniversite öğretmenim bana bunu öğretti HTTP is great (and beutiful) because it is stateless. Sanayiye katıldığımdan beri, bu beuty arayışındayım ama tam olarak bulamıyorum. Herkes sadece gördüğünüz devletleri tutmaktan bahsediyor!
Dipan Mehta

@DipanMehta: Eğer RFC2616'ya bakarsanız, "güzellik" kısmı hakkında öğretmeninizle aynı fikirde olacağınızdan emin değilim :) Size "tamamen vatansız" fikrin gerçekten harika olduğunu ve sorunlu bulduğumu söylesem de onu
katlettiğimizi

Vatansız ve web uygulaması birlikte iyi gitmiyor. Giriş yapmak gibi küçük şeyler taşıma durumunda. Harika, eğer onları isteyen herkese oldukça küçük dosyalar sunuyorsanız, sanırım.
psr

Bir HTML5 numarası kullanarak web sitenizin tüm açık sekmeleri arasında iletişim kurmak için küçük bir kütüphane yazdım .
katafetamin

Yanıtlar:


3

Kısa cevap:

Sen olamaz gerçekten başka bir sekmesinden devlet bilgi aktarmak ...

Uzun cevap:

Sen olamaz gerçekten , başka bir sekmesinden durumu bilgilerini aktarmak bu test ortamı ve güvenliğin çok şiddetli ihlali olurdu.

Bununla birlikte, durumu dolaylı olarak iki sekme arasında şu şekilde geçirebilirsiniz:

Başka bir seçenek, 2 sekme arasında bilgi aktarmak için çerezler aracılığıyla iletişim kurmaktır, ancak bu büyük olasılıkla sorunlara neden olur, tarayıcıya oldukça bağımlıdır ve sayfa yeniden yüklemeleri gerektirir (ve dürüst olmak gerekirse bunu hiç denemedim ve sadece düşündüm, ama diğerleri var bitmiş o ) .

Bu nedenle, tarayıcı uzantıları oldukça sınırlayıcı bir yol olduğundan, istemci-sunucu iletişiminin yoluna gitmeli ve istemcilerin olayları bir sunucuya yayınlamasına izin verecek bir sistem geliştirmelisiniz, bu da onları yeniden gönderir (veya başka bir yayın türünü) seçtiğiniz bir iletişim protokolü aracılığıyla diğer müşterilere.


Güncelleme 1: Bir yorumda kaldırmadan önce bahsedildiği gibi (gelen kutusunda görünmediği için kredi veremez, üzgünüm)

HTML5 window.postMessageAPI'yi sunar.

Çalışan bir örnek için bkz. John Resig'in Çapraz Pencere Mesajlaşma hakkındaki blog yazısı . Ve çok ilginç bir şekilde, bu yazıdaki yorumlara bakarsanız, Malte adlı birinin modern tarayıcılarda kullanmak için yazdıkları bir kütüphanedenwindow.postMessage veya eski tarayıcılarda çerez tabanlı bir sürümden bahsettiğini fark edeceksiniz .

Daha fazla ayrıntı ve örnek için bunları okuyun:

Güncelleme 2:

2012-03-04 olarak HTML5 spesifikasyonunun hala bir taslak olduğunu ve bu nedenle bazı özelliklerin kaldırılabileceğini unutmayın . Bu yüzden dikkatli kullanın ...


Görünüşe göre yanlışım, HTML5 gerçekten de window.postMessage API'yi tanıtıyor.
haylem

Ayrıca, John Resig'in Çapraz Pencere Mesajlaşma hakkındaki blog yayınını ve yorumları okursanız , Malte adlı bir kişinin [modern] tarayıcılarda kullanmak için yazdıkları bir [kütüphane] [3] 'den bahsettiğini veya eski tarayıcılar, bu yüzden benim çerez şey o deli değildi.
haylem

3

Kısa süre önce , pencereler arasında yayın mesajlarını uygulamak için yerel depolamayı kullanan Intercom'u keşfettim . Yerel depolama onstorage, veri değiştiğinde bir olay ( ) başlatır, bu nedenle yoklama gerekmez. Intercom, bir alandaki tüm sayfaların nasıl açıldıklarına bakılmaksızın iletişim kurmasına olanak tanır.


1

Pencereleriniz (sayfalarınız) aynı etki alanından (orijin) geliyorsa, localStorageveri paylaşmak ve mesaj yayınlamak için kullanılabilir. Göz önünde bulundurmanız gereken bir şey, her tarayıcı penceresinin (sayfa) ayrı bir iş parçacığında çalıştığıdır. Yani, eğer pencereler arası iletişimden bahsediyorsak, çok iş parçacıklığından da bahsediyoruz.

localStorageIE ile ilgili bazı sorunları da göz önünde bulundurmalısınız :

  • IE8'de localStorage için bazı testler yaptım. LocalStorage'da binlerce değişiklik yapıldıktan sonra, aynı kaynaktan gelen pencereler 'depolama' olaylarını almayı durdurur. Dahası, aynı localStorage öğesinden okumaya çalışırsınız, değerler farklı pencerelerde farklı olabilir. Yani, IE8'in localStorage'ı desteklemediğini söyleyebilirim

  • IE9 ve IE10, bu pencereden localStorage değiştirilse bile 'depolama' olay işleyicisini çağırır ( bu belirtime aykırıdır ).

  • De vardır IE11 ile bilinen sorunlar .

Son zamanlarda interwindow iletişim kütüphanesini yayınladım (tüm özellikler benioku içinde açıklanmıştır). İş parçacığı için güvenli veri paylaşımı ve olay yayını sağlar. Ayrıca bazı IE sorunlarını çözer (IE8 kesinlikle desteklenmez, farklı orijinli üst içindeki iframe ile IE11 hatası sadece IE sabitleme ile çözülebilir - IE11 güncellemesini bekliyor).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.