Я пишу скрипт на странице, который проверяет, должны ли обновляться определенные части страницы (на основе информации на странице, переданной из представления Django).Обновление работает в браузерах на компьютерах / ноутбуках, но не работает в браузерах на iPad (и, исходя из моего чтения, я ожидаю iPhone).Это даже работает на моем телефоне Pixel.Итак, похоже, что это проблема, ограниченная iPad (и телефонами?).
В данный момент я работаю на dev-сервере Django, если это имеет какое-либо отношение к проблеме.Из того, что я вижу на терминале с замазкой, iPad делает запрос (каждые 2 секунды происходит GET), но я не знаю, что происходит на iPad, что ничего не обновляется.Как Safari, так и Chrome демонстрируют одинаковое проблемное поведение.В прошлый раз, когда я смотрел на эту проблему (с немного другим кодом), это не было проблемой для Macbooks, только для iPad.
--- EDIT ---
Я сейчас работаю напроизводственный сервер.Все еще есть та же проблема.Просматривая журналы доступа, я вижу запросы, поступающие с iPad, просто нет изменений на отображаемой странице.
Вот код, о котором идет речь:
HTML
{% block page_updates %}
<div class="container-fluid" id="last_times">
<p style="display:none">Last action taken: <span id="actionTime">{{ update_times.action.isoformat }}</span></p>
<p style="display:none">Last chat made: <span id="chatTime">{{ update_times.chat.isoformat }}</span></p>
</div>
<p style="display:none">Page last updated: <span id="updateTime"></span>
{% endblock %}
Javascript
<script>
function refresh_action_log(){
var url_actions = document.URL + ' #action_log';
var url_destiny = document.URL + ' #destiny_box';
$('#action_log').load(url_actions);
$('#destiny_box').load(url_destiny);
}
function refresh_chat_log() {
var url_chat_log = document.URL + ' #chat_log';
$('#chat_log').load(url_chat_log);
}
function check_and_update() {
var pageUpdate = new Date(document.getElementById('updateTime').innerHTML);
var actionUpdate = new Date($("#actionTime").text());
var chatUpdate = new Date($("#chatTime").text());
var now = new Date();
if (actionUpdate > pageUpdate && chatUpdate > pageUpdate) {
refresh_action_log();
refresh_chat_log();
// changing all of the .toLocaleString() to .toISOString() was the solution
document.getElementById('updateTime').innerHTML = now.toLocaleString();
} else if (actionUpdate > pageUpdate) {
refresh_action_log();
document.getElementById('updateTime').innerHTML = now.toLocaleString();
} else if (chatUpdate > pageUpdate) {
refresh_chat_log();
document.getElementById('updateTime').innerHTML = now.toLocaleString();
};
}
function update_times() {
var url_last_times = document.URL + ' #last_times';
$('#last_times').load(url_last_times, function () {
// When it loads, schedule the next request for 2s later
setTimeout(update_times, 2000)
});
check_and_update();
};
$(function () {
update_times();
var dt = new Date(); // This line and the next were sitting in another function
document.getElementById('updateTime').innerHTML = dt.toLocaleString();
})
</script>
Основываясь на некоторых других вопросах переполнения стека, я догадываюсь, что проблема заключается в кэшировании в iPad.
Вопросы:
- Это проблема с кешированием?
- Если да, то как я могу сказать iPads, что справиться?
- Если нет, то на что еще мне обратить внимание?
РЕДАКТИРОВАТЬ:
Окончательное решение: iPad неправильно считывал время.Я выложу ответ, который будет подробно описан.