2012-10-20 16 views
7

Bir tarayıcıda bir Mutex'i (JavaScript'te) paylaşacak iki sekme için bir yol var mı?Muteks Kilidi (JS) Bir tarayıcının birden fazla sekmesi arasında paylaşıldı mı?

node.js & socket.io kullanarak bir web uygulamasında çalışıyorum ve çeşitli sekmelerin sunucuyla tek bir bağlantı paylaşmasını istiyorum. "Lider" sekmesi, bağlantıyı koruyan tek kişidir, diğerlerinin mesajlarının tümü bunun üzerinden iletilir. Şu anda, lideri seçmek için bir lider seçim algoritması kullanıyorum, ancak mevcut bir kişi aşağı giderse, yeni bir liderin yeniden seçilmesi için ikinci veya iki saniye sürdüğü göz önüne alındığında, bunu yapmak için daha iyi bir yöntem olup olmadığını merak ediyorum. aynı.

cevap

0

Her sekme bağımsızdır ve bu nedenle tarayıcılar muhtemelen bir sekmede JS'nin başka bir sekmeyi etkilemesine veya değiştirmesine izin vermez. Yukarıdakilerden bir istisna, bir sekmenin JavaScript kullanarak diğerini ortaya çıkarmasıdır.

Ancak, bir Chrome uzantısı veya Firefox Addon bakmak olabilir. Her ikisi de aradığınız kabiliyeti sağlar.

Alternatif İş Akışı:

Sen window.open() kullanarak kalanını açılır bir ana-sekmesini, olabilir. Fonksiyon açılan pencereye bir referans verir, daha sonra window.postMessage() ile birlikte kullanılabilir.

var windowObjectReference = window.open(strUrl, strWindowName[, strWindowFeatures]); 
//windowObjectReference is a reference to the newly created window. 
+1

Çeşitli sekmeler tamamen birbirlerini ... localStorage izole edilir gibi değil bir bilgi paylaşımının asal örneği aralarında bir ilişki var. Bu yüzden eğer izin vereceklerse, iletişim ve paylaşım için uygun kanallar oluşturmak daha iyi olmaz (tabi ki, hepsi aynı etki alanı politikasına tabi). Bir uzantı/eklentiye gelince, bunu düşünmeyi düşünmüştüm, ancak daha tarayıcıdan bağımsız bir çözüm istedim. –

+1

Evet. Bu konuyu unutmuştum. Https://developer.mozilla.org/en-US/docs/DOM/window.postMessage adresine bakabilirsiniz. Ancak yine de başka bir pencereye referans göndermeniz gerekir; –

+0

Daha önce bu sayfadan geçtim. Buradaki * büyük * sorun, mesajı göndermek istediğiniz pencereye bir referansa ihtiyacınız olmasıdır. Buna sahip olamam. Bu, localStorage'ın "depolama" etkinliğinin, nasıl açıldığına bakılmaksızın, aynı kökendeki tüm sekmelerde tetiklendiği için kazanıldığı yerdir. –

İlgili konular