Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Отключить навигацию по истории

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Веб-программинг] >> Отключить навигацию по истории
Имя
Сообщение << Старые топики   Новые топики >>
Отключить навигацию по истории - 2009-02-10 03:13:31.563333   
kreol

Сообщений: 823
Оценки: 0
Присоединился: 2007-03-08 03:13:06.876666
При навигации по сайту текущая страница записывается на сервере, соответственно, если пользователь жмёт в броузере кнопку "назад", сервер об этом НЕ узнаёт. Нужно запретить пользователю передвигаться по хистори. Поскольку хистори средвствами Джаваскрипта удалить нельзя (из-за политики безопасности), то единственное, что приходит в голову - не записывать её вообще. Частное решение для ссылок - заменять через top.location.replace текущую страницу и останавливать распространение события (пример ниже). Увы, не работает для форм. replace выполняет GET запрос, даже если сабмитить через form.submit(), броузер запоминает страницу, а асинхронный запрос через Ajax требует слишком много преобразований в проекте.
Есть идеи?

&lt;head&gt; &lt;title&gt;test&lt;/title&gt; &lt;script type="text/javascript"&gt; function doLink(e) { &nbsp;&nbsp;&nbsp; var a = (document.all) ? e.srcElement : e.target; &nbsp;&nbsp;&nbsp; if (a.nodeType == 3) a = a.parentNode; &nbsp;&nbsp;&nbsp; if (a.getAttribute('href')) { &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; top.location.replace(a.getAttribute('href')); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false; &nbsp;&nbsp;&nbsp; } &nbsp;&nbsp;&nbsp; return true; } &lt;/script&gt; &lt;/head&gt; &lt;body onclick="return doLink(event);"&gt; &lt;a href="http://google.com"&gt;Test&lt;/a&gt; &lt;/body&gt; &lt;/html&gt;
Post #: 1
RE: Отключить навигацию по истории - 2009-02-10 09:29:46.273333   
oRb

Сообщений: 4044
Оценки: 597
Присоединился: 2007-03-28 18:45:06.630000
Отправлять заголовки, указывающие браузеру не кэшировать документ. Не уверен, что это поможет в случае с оперой, но надо пробовать
Post #: 2
RE: Отключить навигацию по истории - 2009-02-10 10:24:33.950000   
kolPeeX

Сообщений: 1456
Оценки: 0
Присоединился: 2007-01-25 14:57:57.683333
history.forward() на каждой странице. Тогда на самой последней странице эта функция ничего не сделает, а на других (при нажатии "Назад") переведет вперед.
Post #: 3
RE: Отключить навигацию по истории - 2009-02-10 14:31:04.876666   
kreol

Сообщений: 823
Оценки: 0
Присоединился: 2007-03-08 03:13:06.876666
quote:

ORIGINAL: oRb

Отправлять заголовки, указывающие браузеру не кэшировать документ. Не уверен, что это поможет в случае с оперой, но надо пробовать

Для Firefox'а тоже ен помогает. Может в кэш страницы и не записываются, но хистори точно сохраняется.

quote:

ORIGINAL: kolPeeX

history.forward() на каждой странице. Тогда на самой последней странице эта функция ничего не сделает, а на других (при нажатии "Назад") переведет вперед.

Для IE прекрасно, но FF опять же подводит: при нажатии кнопки "Назад" событие onload не срабатывает. Можно, конечно, поставить на mouseover, но пока юзер не переведёт мышь на тело страницы, он будет видеть страницу из хистори.
Post #: 4
RE: Отключить навигацию по истории - 2009-02-10 18:29:24.170000   
kolPeeX

Сообщений: 1456
Оценки: 0
Присоединился: 2007-01-25 14:57:57.683333
Попробуй через рекурсивную setTimeout (ну или как эта задержка). По идее, таймер сохранится, если пользователь перейдет на страницу нажатием кнопки "Назад".
Post #: 5
RE: Отключить навигацию по истории - 2009-02-10 22:44:29.326666   
kreol

Сообщений: 823
Оценки: 0
Присоединился: 2007-03-08 03:13:06.876666
quote:

ORIGINAL: kolPeeX

Попробуй через рекурсивную setTimeout (ну или как эта задержка). По идее, таймер сохранится, если пользователь перейдет на страницу нажатием кнопки "Назад".

Пробовал уже, страница загружается - все таймеры сбрасываются.
Post #: 6
RE: Отключить навигацию по истории - 2009-02-11 01:57:44.336666   
kreol

Сообщений: 823
Оценки: 0
Присоединился: 2007-03-08 03:13:06.876666
А, собственно, что вызывается, когда пользователь жмёт "Назад"? Знаю, что onunload вызовется, но если даже вернуть в нём false, распространение события не остановитс, а значит, есть ещё какая-то функция, которая уже вызывает onunload. Кто-нибудь в курсе?
Post #: 7
RE: Отключить навигацию по истории - 2009-02-11 03:14:04.486666   
Pashkela

Сообщений: 3756
Оценки: 736
Присоединился: 2007-01-03 06:19:40.900000
блин, читаю, читаю, а рефер проверять и если параметр страницы рефера на 1 больше - тупо перенаправлять, на PHP, header?

явускрипт и отключить можно, так что даже если и придумаешь - не универсально
Post #: 8
RE: Отключить навигацию по истории - 2009-02-11 04:21:24.990000   
kreol

Сообщений: 823
Оценки: 0
Присоединился: 2007-03-08 03:13:06.876666

quote:

ORIGINAL: Pashkela

блин, читаю, читаю, а рефер проверять и если параметр страницы рефера на 1 больше - тупо перенаправлять, на PHP, header?

Что такое рефер?
Это не PHP, проект на Java.
Post #: 9
RE: Отключить навигацию по истории - 2009-02-11 04:52:55.566666   
Pashkela

Сообщений: 3756
Оценки: 736
Присоединился: 2007-01-03 06:19:40.900000
ну сделай на javascript

referrer - http-заголовок, содержащий информацию, откуда пришел посетитель. Если пришел оттуда, откуда не надо - перенаправить взад. И всё. Просто как три копейки. По ссылке конкретные примеры есть.

http://www.netmechanic.com/news/vol4/javascript_no14.htm
Post #: 10
RE: Отключить навигацию по истории - 2009-02-11 11:18:06.256666   
kreol

Сообщений: 823
Оценки: 0
Присоединился: 2007-03-08 03:13:06.876666

quote:

ORIGINAL: Pashkela

По ссылке конкретные примеры есть.

http://www.netmechanic.com/news/vol4/javascript_no14.htm

File not found.

quote:

referrer - http-заголовок, содержащий информацию, откуда пришел посетитель. Если пришел оттуда, откуда не надо - перенаправить взад. И всё. Просто как три копейки.

Для того, чтобы сделать хоть что-то на Джаваскрипте, нужно, чтобы он вызывался. Когда переходишь по истории назад в FF, не вызывается ничего. Вернее onload не вызывается. Вот выше товарищ уже подсказал history.forward(), чтобы кидать человека на последнюю страницу - ты это имеешь ввиду? Ну так в том то и дело, что не хочет скрипт вызываться - страница из истории тупо перерисовывается БЕЗ запуска скриптов.
Post #: 11
RE: Отключить навигацию по истории - 2009-02-11 14:49:49.040000   
Pashkela

Сообщений: 3756
Оценки: 736
Присоединился: 2007-01-03 06:19:40.900000
нет, не это. А слово script в ссылке набираем ручками - фильтр
Post #: 12
RE: Отключить навигацию по истории - 2009-02-11 15:14:19.233333   
oRb

Сообщений: 4044
Оценки: 597
Присоединился: 2007-03-28 18:45:06.630000
Pashkela, страница берется из кеша. К серверу браузер даже не обращается.
Post #: 13
Страниц:  [1]
Все форумы >> [Веб-программинг] >> Отключить навигацию по истории







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.