Tôi đang cố gắng để xác định một số cách để thiết lập một ID duy nhất cho các tab Chrome đáp ứng các điều kiện sau đây:Persistent ID duy nhất cho các tab Chrome kéo dài giữa các phiên trình duyệt
- Độc đáo xác định mỗi tab
- Lưu trú tương tự cho một tab nhất định giữa trình duyệt khởi động lại (tab được khôi phục theo phiên)
- Vẫn giữ nguyên nếu tab bị đóng và sau đó mở lại với Hoàn tác tab đã đóng (Ctrl + Shift + T)
- Vẫn phân biệt nếu tab bị trùng lặp
Tôi đã thực hiện một số nghiên cứu khá tích cực để tìm ra giải pháp toàn diện, nhưng không có gì có vẻ khá là lừa. Dưới đây là những phương pháp tôi đã cố gắng, để tăng tính hiệu quả:
- tab.id cung cấp sử dụng Chrome: không tồn tại giữa các phiên trình duyệt hoặc đóng/undo-gần
- Đặt một GUID trong cookie : không phải là duy nhất trên mỗi tab, chỉ có mỗi tên miền/URL
- Đặt một GUID trong localStorage: vẫn tồn tại giữa các phiên trình duyệt và gần gũi/undo-gần, nhưng không phải là duy nhất trên mỗi tab, chỉ mỗi miền
- Đặt GUID trong phiênStorage: duy nhất cho mỗi tab, vẫn tồn tại khi đóng/hoàn tác gần, duy nhất cho các tab trùng lặp, nhưng bị xóa giữa các phiên trình duyệt
- Sử dụng thuộc tính tài liệu trang web có thể nhận dạng làm khóa duy nhất: đây là cách tiếp cận tốt nhất tôi đã tìm thấy cho đến nay. Một khóa có thể được tạo thông qua tập lệnh nội dung từ các giá trị sau:
[location.href, document.referrer, history.length]
.
Về phương pháp cuối cùng này, khóa được tạo là duy nhất trên tất cả các tab có chung URL, liên kết giới thiệu và độ dài lịch sử. Các giá trị đó sẽ giữ nguyên cho một tab nhất định giữa trình duyệt khởi động lại/phiên khôi phục và đóng/hoàn tác đóng. Mặc dù khóa này "độc đáo", có những trường hợp không rõ ràng: ví dụ: 3 tab mới được mở cho http://www.google.com tất cả sẽ có cùng một điểm chung (và điều này thường xảy ra trong thực tế).
Phương pháp "đặt GUID trong sessionStorage" có thể được sử dụng để phân biệt giữa nhiều tab với cùng khóa được tạo cho các trường hợp đóng/đóng và trùng lặp trong phiên trình duyệt hiện tại. Nhưng điều này không giải quyết được vấn đề mơ hồ giữa khởi động lại trình duyệt.
Sự mơ hồ cuối cùng này có thể được giảm nhẹ trong quá trình khôi phục phiên bằng cách quan sát tab nào Chrome mở cùng nhau trong cửa sổ và ngoại suy cho khóa mơ hồ nhất định mà tab thuộc cửa sổ dựa trên sự hiện diện của các tab 'anh chị em' mong đợi trong phiên trình duyệt trước đó). Như bạn có thể tưởng tượng, việc triển khai giải pháp này khá tham gia và khá tinh ranh. Và nó chỉ có thể phân biệt giữa các tab có cùng khóa mà Chrome khôi phục vào các cửa sổ khác nhau. Điều đó để lại các tab có cùng khóa để khôi phục vào cùng một cửa sổ như không rõ ràng.
Có cách nào tốt hơn không? GUID duy nhất, được tạo bởi trình duyệt, mỗi tab được bảo đảm duy trì giữa các lần khởi động lại trình duyệt (khôi phục phiên) và đóng/hoàn tác đóng sẽ là lý tưởng nhưng cho đến nay tôi chưa tìm thấy bất kỳ thứ gì như thế này.
Ý tưởng tuyệt vời. Thật không may windowId thay đổi giữa các phiên trình duyệt, nhưng nếu tôi có thể suy ra thay đổi cửa sổ giữa các phiên bằng cách ghi nhớ và so sánh tab nào trong mỗi cửa sổ trước và sau khi khởi động lại trình duyệt, tôi có thể sử dụng .index như bạn đề nghị phân biệt hai các tab giống hệt nhau trong một cửa sổ cụ thể. Cảm ơn nhiều. – joelpt
Tôi sẽ thêm rằng tôi có thể tương quan với cửa sổ ghi nhớ "trước khi khởi động lại" với cửa sổ "sau khi khởi động lại" mở, nếu tôi có thể xác định bất kỳ tab * đơn * nào có url + referrer + historylength duy nhất. Vì tab đã nói là thẻ duy nhất có khóa cụ thể đó, tôi biết cửa sổ nào thuộc về nó; Do đó tôi biết rằng bất kỳ thẻ nhớ nào có cùng cửa sổ "cũ" cũng nằm trong cùng một cửa sổ "mới". – joelpt
@joelpt yes, windowId không đáng tin cậy nhưng nếu bạn kết nối các trình nghe sự kiện 'chrome.window.onCreated' và' chrome.window.onRemoved', bạn có thể dễ dàng mô phỏng chỉ mục (id thứ tự) trên tất cả các cửa sổ. –