2012-10-20 33 views
7

Có cách nào để hai tab trong trình duyệt chia sẻ một Mutex (bằng JavaScript) không?Khóa Mutex (JS) Được chia sẻ giữa nhiều tab của trình duyệt?

Tôi đang làm việc trên một ứng dụng web bằng cách sử dụng node.js & socket.io và tôi muốn các tab khác nhau chia sẻ một kết nối với máy chủ. Tab 'leader' được gọi là tab duy nhất duy trì kết nối, trong khi các thông báo cho tất cả chúng được chuyển tiếp thông qua cái này. Ngay bây giờ, tôi đang sử dụng thuật toán bầu cử lãnh đạo để chọn nhà lãnh đạo, nhưng cho rằng phải mất một hoặc hai giây để bầu lại một nhà lãnh đạo mới nếu người hiện tại đi xuống, tôi tự hỏi liệu có một phương pháp tốt hơn để làm tương tự.

Trả lời

0

Mỗi tab độc lập và do đó, các trình duyệt có thể không cho phép JS trong một tab ảnh hưởng hoặc sửa đổi một tab khác. Một ngoại lệ đối với ở trên là khi một tab sinh ra ứng dụng khác bằng JavaScript.

Tuy nhiên, bạn có thể xem xét một số máy lẻ Chrome hoặc Firefox Addon. Cả hai đều cung cấp khả năng bạn đang tìm kiếm.

thay thế Quy trình làm việc:

Bạn có thể có một master-tab, mở ra phần còn lại lên, sử dụng window.open(). Hàm trả về một tham chiếu đến cửa sổ được mở, sau đó có thể được sử dụng kết hợp với window.postMessage().

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

Nó không giống như các tab khác nhau được hoàn toàn cách ly với nhau ... localStorage là một ví dụ chính về cách chia sẻ thông tin tion giữa chúng. Vì vậy, nếu họ sẽ cho phép nó, nó sẽ không được tốt hơn để tạo ra các kênh thích hợp để giao tiếp và chia sẻ (tất nhiên, tất cả đều tuân theo chính sách cùng một tên miền). Đối với một phần mở rộng/addon, tôi đã suy nghĩ xem xét nó, nhưng tôi muốn có một giải pháp độc lập hơn về trình duyệt. –

+1

Vâng. Tôi đã quên về điều đó. Bạn có thể xem https://developer.mozilla.org/en-US/docs/DOM/window.postMessage. Nhưng bạn vẫn cần chuyển một tham chiếu đến cửa sổ khác; –

+0

Tôi đã xem qua trang này trước đây. Vấn đề * lớn * với điều này là bạn cần một tham chiếu đến cửa sổ mà bạn muốn gửi tin nhắn. Tôi không thể có điều đó. Đó là nơi sự kiện 'lưu trữ' của localStorage thắng, vì nó được kích hoạt trên tất cả các tab có cùng nguồn gốc, bất kể chúng được mở ra như thế nào. –

Các vấn đề liên quan