С учетом сценария:
function test() {
let req = window.indexedDB.open("testingdb", 1);
req.onupgradeneeded = evt => {
let db = evt.target.result;
if (!db.objectStoreNames.contains("keys")) {
db.createObjectStore("keys", { keyPath: "id", autoIncrement: true });
}
};
req.onsuccess = evt => {
let db = evt.target.result;
let tx = db.transaction("keys", "readwrite");
let st = tx.objectStore("keys");
let dataReq = st.getAll();
dataReq.onsuccess = dataEvt => {
if (dataEvt.target.result.length === 0) {
alert("new db");
st.add({ test: 1 });
} else {
alert("old db");
}
db.close();
};
};
}
Если я запускаю его при загрузке страницы в Safari на iOS 12, при первой загрузке я получаю предупреждение «new db», при каждой последующей загрузке я получаю «old db».Я могу выйти из Safari, перезагрузить телефон и т. Д. И получить «старый дБ».
Если я использую SFSafariViewController , первая загрузка дает мне «новый дБ», перезагрузка дает мне «старый дБ».НО, если я нажму «Готово», БД будет стерта, и последующие init дадут мне «новый БД», поэтому indexDB просто не сохраняется между сессиями.Печенье есть, локальное хранилище есть.Per:
if (localStorage.getItem("testing")) {
alert("old local storage");
} else {
alert("new local storage");
localStorage.setItem("testing", "yay");
}
Есть ли обходной путь к этой ошибке?Может ли ошибка быть обнаружена без выхода и ввода SFViewController