Я пытаюсь определить, доступен ли кеш (полученный с помощью applicationCache и манифеста кеша HTML5), расположенный в другом домене (локальная файловая система или WWW).
Ресурс проверки кеша (механизм шлюза, если хотите) находится в локальной файловой системе и загружается через веб-просмотр. Это требование, которое я не могу обойти.
До недавнего времени этот локальный файл шлюза проверял, находится ли устройство в сети, и перенаправлял на удаленный ресурс с помощью window.location, а если устройство не было в сети, он отображал графику (также локально упакованную), которая, по сути, говорила: «Вы должны подключитесь к Интернету, чтобы использовать эту функцию».
Однако я совсем недавно реализовал автономную поддержку на этом удаленном ресурсе. Оно работает. Если у нас есть файл шлюза, который просто перенаправляет на удаленный ресурс в автономном режиме, он загружает удаленный ресурс из кеша.
Существует вероятность того, что пользователь может попытаться использовать устройство в автономном режиме, когда он еще не получил к нему доступ через Интернет, поэтому в код шлюза необходимо поместить логику, чтобы проверить, существует ли кеш или нет. Я столкнулся с междоменными проблемами, которых я ожидал, но я не уверен, как это исправить.
Вот код, который я пробовал:
if (window.navigator.onLine === false) {
// See if we're able to reach the content (if it's cached, we'll get HTML, else it'll fail)
cacheCheck = $.ajax(contentLoc, {async:false});
// the request failed so we have no cache at all. let's just show the offline graphic.
if (cacheCheck.status === 0) { // no cache available :(
$("#launchpage").addClass("offline");
} else { // we have a cache :)
redirect();
}
} else {
redirect();
}
Когда я писал его, я наивно надеялся, что $.ajax() извлечет кешированную версию (если она существует), и я мог просто проверить возвращенный объект, чтобы убедиться, что возвращенный код состояния не является статусом ошибки. код.
Однако это не работает, так как объект возвращает «Ошибка: NETWORK_ERR: Исключение XMLHttpRequest 101»
Есть ли какой-либо другой метод, который я могу использовать, чтобы определить, безопасно ли перенаправлять? Требуется, чтобы я отображал локальное изображение, если перенаправление не удалось (из-за отсутствия кеша)