업데이트 (2016-11-01)
이 문제를 해결하기 위해 아래 언급 된 AmplifyJS를 사용하고있었습니다. 그러나 비공개 브라우징에서 Safari의 경우 메모리 기반 스토리지로 다시 넘어갔습니다. 제 경우에는 사용자가 여전히 비공개 브라우징을하고 있어도 새로 고칠 때 저장소가 지워졌 기 때문에 적절하지 않습니다.
또한 iOS Safari에서 항상 개인 모드로 탐색하는 많은 사용자를 발견했습니다. 이러한 이유로 Safari의 더 나은 대안은 쿠키 (사용 가능한 경우)를 사용하는 것입니다. 기본적으로 쿠키는 비공개 브라우징에서도 액세스 할 수 있습니다. 물론 개인 브라우징을 종료 할 때 지워지지 만 새로 고침시 지워지지는 않습니다.
로컬 스토리지 폴백 라이브러리를 찾았습니다 . 설명서에서 :
목적
"비공개 브라우징"과 같은 브라우저 설정을 사용하면 최신 브라우저에서도 작업중인 window.localStorage에 의존하는 것이 문제가되었습니다. 존재하더라도 setItem 또는 getItem을 사용하려고하면 예외가 발생합니다. 이 모듈은 적절한 검사를 실행하여 사용 가능한 브라우저 저장 메커니즘을 확인한 후 노출합니다. localStorage와 동일한 API를 사용하므로 대부분의 경우 드롭 인 대체로 작동해야합니다.
문제를 조심하십시오 :
- CookieStorage에는 스토리지 제한이 있습니다. 여기서 조심하십시오.
- 메모리 저장소는 페이지로드간에 지속되지 않습니다. 이것은 페이지 충돌을 막기위한 스톱 갭이지만, 전체 페이지로드를 수행하지 않는 웹 사이트에는 충분할 수 있습니다.
TL; DR :
사용 로컬 스토리지 대체 (와 통합 API .getItem(prop)
와 .setItem(prop, val)
)
브라우저에 적합한 스토리지 어댑터 (localStorage, sessionStorage, 쿠키, 메모리)를 확인하고 사용하십시오.
원래 답변
이전 답변을 추가하려면 가능한 한 가지 해결 방법은 저장 방법을 변경하는 것입니다. AmplifyJS 및 PersistJS 와 같은 몇 가지 라이브러리 가 있습니다. 두 라이브러리 모두 여러 백엔드를 통해 지속적인 클라이언트 측 스토리지를 허용합니다.
증폭 JS
localStorage
- IE 8 이상
- Firefox 3.5 이상
- 사파리 4+
- 크롬
- 오페라 10.5+
- 아이폰 2 이상
- 안드로이드 2 이상
sessionStorage
- IE 8 이상
- Firefox 2 이상
- 사파리 4+
- 크롬
- 오페라 10.5+
- 아이폰 2 이상
- 안드로이드 2 이상
globalStorage
사용자 데이터
- IE 5-7
- userData는 최신 버전의 IE에도 존재하지만 IE 9 구현의 단점으로 인해 localStorage가 지원되는 경우 userData를 등록하지 않습니다.
기억
- 사용 가능한 다른 스토리지 유형이없는 경우 인 메모리 저장소가 대체로 제공됩니다.
PersistentJS의 경우
- 플래시 : 플래시 8 영구 저장소.
- 기어 : Google Gears 기반 영구 저장소.
- localstorage : HTML5 초안 저장소.
- globalstorage : HTML5 초안 저장 (이전 사양).
- 즉, Internet Explorer 사용자 데이터 동작.
- 쿠키 : 쿠키 기반 영구 저장소.
스토리지 계층 선택에 대해 걱정할 필요가없는 추상화 계층을 제공합니다. 스토리지 유형에 따라 일부 제한 (예 : 크기 제한)이있을 수 있습니다. 지금은 AmplifyJS를 사용하고 있지만 iOS 7 / Safari 등에서 더 많은 테스트를 수행해야합니다. 실제로 문제가 해결되는지 확인하십시오.