Cập nhật (2016-11-01)
Tôi đã sử dụng AmplifyJS được đề cập dưới đây để khắc phục vấn đề này. Tuy nhiên, đối với Safari trong Duyệt web riêng tư, nó đã rơi trở lại vào bộ lưu trữ dựa trên bộ nhớ. Trong trường hợp của tôi, nó không phù hợp vì điều đó có nghĩa là bộ nhớ bị xóa khi làm mới, ngay cả khi người dùng vẫn đang ở chế độ duyệt web riêng tư.
Ngoài ra, tôi đã nhận thấy một số người dùng luôn duyệt ở chế độ Riêng tư trên iOS Safari. Vì lý do đó, một dự phòng tốt hơn cho Safari là sử dụng cookie (nếu có). Theo mặc định, cookie vẫn có thể truy cập ngay cả trong trình duyệt riêng tư. Tất nhiên, chúng sẽ bị xóa khi thoát khỏi trình duyệt riêng tư, nhưng chúng không bị xóa khi làm mới.
Tôi tìm thấy thư viện lưu trữ cục bộ-dự phòng . Từ tài liệu:
Mục đích
Với các cài đặt trình duyệt như "Duyệt web riêng tư", việc dựa vào một cửa sổ đang hoạt động.localStorage đã trở thành một vấn đề, ngay cả trong các trình duyệt mới hơn. Mặc dù nó có thể tồn tại, nó sẽ đưa ra các ngoại lệ khi cố gắng sử dụng setItem hoặc getItem. Mô-đun này sẽ chạy các kiểm tra thích hợp để xem cơ chế lưu trữ trình duyệt nào có thể khả dụng và sau đó hiển thị nó. Nó sử dụng API giống như localStorage, do đó, nó sẽ hoạt động như một sự thay thế thả xuống trong hầu hết các trường hợp.
Cẩn thận với các vấn đề
- CookieStorage có giới hạn lưu trữ. Hãy cẩn thận ở đây.
- MemoryStorage sẽ không tồn tại giữa các lần tải trang. Đây ít nhiều là một khoảng trống để ngăn chặn sự cố trang, nhưng có thể đủ cho các trang web không tải toàn bộ trang.
TL; DR:
Sử dụng dự phòng cục bộ-lưu trữ (API hợp nhất với .getItem(prop)
và .setItem(prop, val)
):
Kiểm tra và sử dụng bộ điều hợp lưu trữ thích hợp cho trình duyệt (localStorage, sessionStorage, cookies, memory)
Câu trả lời gốc
Để thêm vào các câu trả lời trước đó, một cách giải quyết khác có thể là thay đổi phương thức lưu trữ. Có một vài lời nói dối như AmplifyJS và PersistJS có thể giúp đỡ. Cả hai lib đều cho phép lưu trữ phía máy khách liên tục thông qua một số phụ trợ.
Đối với AmplifyJS
lưu trữ cục bộ
- IE 8+
- Firefox 3.5+
- Safari 4+
- Trình duyệt Chrome
- Opera 10,5+
- iPhone 2+
- Android 2+
phiênStorage
- IE 8+
- Firefox 2+
- Safari 4+
- Trình duyệt Chrome
- Opera 10,5+
- iPhone 2+
- Android 2+
toàn cầu
dữ liệu người dùng
- IE 5 - 7
- userData cũng tồn tại trong các phiên bản IE mới hơn, nhưng do sự kỳ quặc trong quá trình triển khai của IE 9, chúng tôi không đăng ký userData nếu localStorage được hỗ trợ.
ký ức
- Cửa hàng trong bộ nhớ được cung cấp dưới dạng dự phòng nếu không có loại lưu trữ nào khác khả dụng.
Dành cho PersistentJS
- flash: Flash 8 lưu trữ liên tục.
- bánh răng: lưu trữ liên tục dựa trên Google Gears.
- localst Storage: Lưu trữ dự thảo HTML5.
- globalst Storage: Lưu trữ dự thảo HTML5 (thông số cũ).
- tức là: hành vi người dùng Internet Explorer.
- cookie: lưu trữ liên tục dựa trên cookie.
Họ cung cấp một lớp trừu tượng để bạn không phải lo lắng về việc chọn loại lưu trữ. Hãy nhớ rằng có thể có một số hạn chế (chẳng hạn như giới hạn kích thước) tùy thuộc vào loại lưu trữ. Ngay bây giờ, tôi đang sử dụng AmplifyJS, nhưng tôi vẫn phải thực hiện thêm một số thử nghiệm trên iOS 7 / Safari / vv. để xem nếu nó thực sự giải quyết vấn đề.