Tôi đã tìm kiếm cách giao tiếp giữa nhiều tab hoặc cửa sổ trong một trình duyệt (trên cùng một tên miền, không phải CORS) mà không để lại dấu vết. Có một số giải pháp:
Đầu tiên có lẽ là giải pháp tồi tệ nhất - bạn cần mở một cửa sổ từ cửa sổ hiện tại của mình và sau đó bạn chỉ có thể giao tiếp miễn là bạn giữ cho các cửa sổ mở. Nếu bạn tải lại trang trong bất kỳ cửa sổ nào, rất có thể bạn đã mất liên lạc.
Cách tiếp cận thứ hai, sử dụng postMessage, có thể cho phép giao tiếp nguồn gốc chéo, nhưng gặp vấn đề tương tự như cách tiếp cận đầu tiên. Bạn cần duy trì một đối tượng cửa sổ.
Cách thứ ba, sử dụng cookie, lưu trữ một số dữ liệu trong trình duyệt, có thể trông giống như gửi tin nhắn đến tất cả các cửa sổ trên cùng một tên miền, nhưng vấn đề là bạn không bao giờ có thể biết liệu tất cả các tab đã đọc "tin nhắn" hay chưa dọn dẹp. Bạn phải thực hiện một số loại thời gian chờ để đọc cookie định kỳ. Hơn nữa, bạn bị giới hạn bởi chiều dài cookie tối đa, đó là 4KB.
Giải pháp thứ tư, sử dụng localStorage, dường như khắc phục những hạn chế của cookie và thậm chí có thể lắng nghe bằng cách sử dụng các sự kiện. Làm thế nào để sử dụng nó được mô tả trong câu trả lời được chấp nhận.
Chỉnh sửa 2018: câu trả lời được chấp nhận vẫn hoạt động, nhưng có một giải pháp mới hơn cho các trình duyệt hiện đại, sử dụng BroadcastChannel. Xem câu trả lời khác để biết ví dụ đơn giản mô tả cách dễ dàng truyền tin nhắn giữa các tab bằng cách sử dụng BroadcastChannel.