Как зайти в Даркнет?!
25th January, 01:11
5
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
893
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
912
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
905
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4381
0
Помогите пожалуйста решить задачи
24th November, 23:53
6086
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4350
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4396
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Проблема С Кнопкой Safari Назад
Я занимаюсь небольшим программированием и веб-работой для местного общественного колледжа. Работа, которая включает в себя поддержание очень большого и душераздирающего веб-сайта, который состоит из Ходж-поджа VBScript, javascript, Dreamweaver, сгенерированного cruft и коллекции дополнений, которые различные мошенники убедили их купить на протяжении многих лет.
Несколько дней назад мне позвонили "The website is locking up for people using Safari!" хорошо, Шаг первый скачать Safari (v3.1.2), Шаг второй серфинг на сайт. Кажется, все работает нормально.
Короче говоря, я наконец-то вычленил проблему, и она относится к кнопке возврата Safari. На сайте используется меню fancy-pants javascript, которое работает в каждом браузере, который я пробовал, включая Safari, в первый раз. Но в Safari, если вы перейдете по ссылке со страницы, а затем нажмете кнопку Назад, Меню больше не работает.
Я сделал сокращенную веб-страницу, чтобы проиллюстрировать этот принцип.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head><title>Safari Back Button Test</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body onload="alert('Hello');">
<a href="http://www.codinghorror.com">Coding Horror</a>
</body>
</html>
Загрузите страницу, и вы увидите окно оповещения. Затем перейдите по ссылке со страницы и нажмите кнопку Назад. В IE и Firefox вы снова видите окно оповещения, в Safari-нет.
После энергичного поиска в гугле я обнаружил других людей с похожими проблемами, но без действительно удовлетворительных ответов. Таким образом, мой вопрос заключается в том, как я могу заставить мои страницы работать так же, как в Safari после того, как пользователь нажимает кнопку назад, как и в других браузерах?
Если это глупый вопрос, пожалуйста, будьте нежны, javascript несколько ново для меня.
Решение Стефана iframe работает, но если это недостаточно элегантно, я нахожу, что следующий JavaScript также решает эту проблему:
window.onunload = function(){};
То есть, если ваше меню JavaScript, то вы можете предпочесть решить эту проблему с JavaScript тоже.
Идея определения обработчика событий выгрузки пришла из этой статьи Firefox 1.5: https://developer.mozilla.org/en/Using_Firefox_1.5_caching .
Вот хорошее решение для мобильных устройств Safari:
/*! Reloads page on every visit */
function Reload() {
try {
var headElement = document.getElementsByTagName("head")[0];
if (headElement && headElement.innerHTML)
headElement.innerHTML += " ";
} catch (e) {}
}
/*! Reloads on every visit in mobile safari */
if ((/iphone|ipod|ipad.*os 5/gi).test(navigator.appVersion)) {
window.onpageshow = function(evt) {
if (evt.persisted) {
document.body.style.display = "none";
location.reload();
}
};
}
( источник )
Я изменил его в соответствии с моими потребностями, но так оно и есть. (раздражающий белый экран при обновлении, если вы не измените его).
Пожалуйста, не следуйте ни одному из советов, которые говорят вам игнорировать кэш. Страницы кэшируются по определенной причине - для улучшения пользовательского опыта. Методы, которые вы используете, сделают пользовательский опыт хуже, поэтому, если вы не ненавидите своих пользователей, не делайте этого.
Правильное решение для Safari (Desktop и iOS) - использовать событие pageshow вместо события onload (см. https://developer.mozilla.org/en-US/docs/Using_Firefox_1.5_caching для того, что это такое).
Событие pageshow будет запущено одновременно с ожидаемым событием onload , но оно также будет работать, когда страницы обслуживаются через кэш. Похоже, это то, что вам нужно в любом случае.
Ан iframe решает эту проблему:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head><title>Safari Back Button Test</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body onload="alert('Hello');">
<a href="http://www.codinghorror.com">Coding Horror</a>
<iframe style="height:0px;width:0px;visibility:hidden" src="about:blank">
this prevents back forward cache
</iframe>
</body>
</html>
новые подробности
Я понятия не имею, что вызывает эту проблему, но я знаю, кто может быть в состоянии помочь вам. Safari построен на Webkit и за исключением Apple (которые не так сильно настроены на сообщество) команда Webkit может знать, в чем проблема.
Это совсем не глупый вопрос.
Я заметил нечто очень похожее. Я думаю, это потому, что Firefox и IE, возвращаясь назад, снова извлекают страницу с сервера, а Safari-нет. Вы пробовали добавить заголовок страницы с истекшим сроком действия / без кэша? Я собирался разобраться в этом, когда обнаружу такое поведение, но у меня еще не было времени.
Я знаю, что этому потоку уже год, но я только что исправил идентичную проблему Safari-only, используя ProjectSeven Safari backbutton fix. Работает как заклинание.
http://www.projectseven.com/extensions/info/safaribbfix/index.htm
У меня была такая же проблема на iPad.
Не то чтобы красиво, но работает :). Как это работает.
Я понял, что на iPad Safari страница не была перезагружена, когда была нажата кнопка Назад. Я ставлю счетчик каждую секунду на странице и сохраняю текущий timestamp.
При загрузке страницы происходит синхронизация счетчика и времени. На кнопке назад счетчик продолжает работать там, где он остановился, и между timestamp и счетчиком есть зазор. Если зазор больше, чем 500 мс, заставьте перезагрузить страницу.
В файле action.js
var showLoadingBoxSetIntervalVar;
var showLoadingBoxCount = 0;
var showLoadingBoxLoadedTimestamp = 0
function showLoadingBox(text) {
var showLoadingBoxSetIntervalVar=self.setInterval(function(){showLoadingBoxIpadRelaod()},1000);
showLoadingBoxCount = 0
showLoadingBoxLoadedTimestamp = new Date().getTime();
//Here load the spinner
}
function showLoadingBoxIpadRelaod()
{
//Calculate difference between now and page loaded time minus threshold 500ms
var diffTime = ( (new Date().getTime()) - showLoadingBoxLoadedTimestamp - 500)/1000;
showLoadingBoxCount = showLoadingBoxCount + 1;
var isiPad = navigator.userAgent.match(/iPad/i) != null;
if(diffTime > showLoadingBoxCount && isiPad){
location.reload();
}
}