2008-10-20 5 views
12

Есть ли способ сбросить статус посещения по ссылкам?Сброс статуса посещения по ссылкам

Сценарий таков: на сайте интрасети, у которого, естественно, много ссылок, мы хотим, чтобы ссылка имела статус «посещений» только в течение заданного периода времени. Поэтому я ищу способ манипулировать посещенным статусом ссылок.

Выполнено ли это? Конечно, это должен быть кросс-браузер.

ETA: Клиентские решения вполне приемлемы. Предпочитаемый даже .. :-)

ETA-2: Cookies разрешены. Нет запретов здесь :-)

+1

Возможно ли печенье? :) – TheObserver 2008-10-20 08:25:20

ответ

2

Я полагаю, что это свойство браузера, поэтому его нельзя контролировать со стороны сервера.

Один «взлом» может заключаться в том, чтобы добавить неиспользуемую строку запроса в конце ссылок и периодически вращать их. Хотя это означает, что длина «посещенного» состояния для конкретного клиента зависит от того, когда строка запроса вращается, а не фиксированный период времени.

3

Если простой стороне сервера решение с «меняющимися URL», как:

«http://url1?expire2008_10_20», который становится «http://url1?expire2008_10_21» после 24 часов,

не в порядке, вы можете использовать следующее:

Пусть сервер хранит файл cookie в браузере с последним посещенным временем ссылки. Если будет много ссылок и максимальной длиной печенья не будет достаточно, вы можете

  1. магазин сеанс печенья и сохранить посещенные данные на сервере
  2. использование флэш аналог печенье - Local Shared Object

Также поместите код, который рандомизирует URL-адрес для клиента, если истекло время последнего посещения.

7

Ссылки отображаются как «посещенные», когда браузер решит применить :visitedCSS pseudo-class.

Клиентский способ сброса ссылок на невидимое состояние - (как-то) очистить историю просмотров. Я был бы очень удивлен, узнав, что есть портативный способ сделать это. У этого также есть неприятные побочные эффекты, такие как искажение поведения чувствительных к истории интеллектуальных локальных баров, таких как Firefox 3.

Как предложил Drew Noakes, серверный способ заключается в добавлении некоторых параметров запроса шума к ссылкам , и периодически меняйте параметр запроса. Это только дает плохое приближение к поведению, которое вы хотите. Чтобы получить «правильное» поведение, вам нужно будет отслеживать историю посещенных страниц на стороне пользователя на сервере, поэтому вы можете изменить параметр шума для определенной страницы только после необходимого времени.

Все сказанное, вероятно, это плохая идея, чтобы на самом деле попытаться «сбросить статус посещения по ссылкам».

Я думаю, что лучшим решением было бы настроить стиль страницы так, чтобы: pseudo class: отображал то же самое, что и псевдо-класс: link. Затем сохраните историю посещенных ссылок на стороне сервера и настройте отображение ссылок с использованием явного класса visited.

Если у вас нет удобной идентификации пользователя и вы не хотите запрашивать логин, вы всегда можете использовать случайный постоянный файл cookie.

0

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

На ссылочной странице поместите Javascript, чтобы проверить наличие файла cookie.

Если он не существует, есть Javascript добавить параметр в URL с большим случайным числом в нем (так история браузера не распознает его.)

Если он существует, есть Javascript добавить параметр с тем же значением, как печенье (так история браузера делает его распознать.)

Примечания:

  • Я предполагаю, что цель ссылки на том же домене, что и ссылающейся страницы , Если нет, используйте страницу перенаправления в том же домене.

  • Это будет работать только в том случае, если история браузера соответствует продолжительности жизни вашего файла cookie. Если у вас короткая история браузера или нет, клиент не будет отображать ее как посетив.

  • Пожалуйста, не делайте этого! Ваши пользователи хорошо понимают, что означает «посещенный». не сломайте его - вы только смутите их.

  • Вам нужно учитывать серверные решения для людей, которые не запускают Javascript?

  • Я не тестировал этот дизайн.

6

Я чувствую что-то вонючее в самой идее.

Какова цель сброса статуса посещения ссылки? чтобы сообщить, что доступны некоторые новые данные? то может быть, что-то более подробное, как «НОВЫЙ» образ, было бы более уместным?

с другой стороны, если вам действительно нужно сделать это - изменить URL

+1

Это интранет. Все ссылки быстро посещаются для любого пользователя. Поэтому посещаемый статус теряет всякий смысл, если его не сбрасывать раз в то время. – erlando 2008-10-20 09:29:51

0

Ведение списка адресов посетили с меткой времени на сессии пользователей.

Когда ссылка страница загружает

  • флеш несвежих URLs ссылки
  • стиля, содержащиеся в списке, как посещаемые.
0

Как проблема чисто визуализации, вам не нужно беспокоиться о том, чтобы каким-то образом пометить посещенные ссылки на невзведенные.

Добавьте обработчик onclick к вам, который изменяет стиль ссылки, чтобы он напоминал состояние посещения. Из этого обработчика вы можете, например. напишите статус ссылки на файл cookie.

Затем вы можете периодически проверять наличие ссылок, которые больше не должны быть видимыми, и изменить стиль в нормальном режиме.

6

Таким образом, вы просто хотите, чтобы «посещенные» ссылки выглядели по-другому в течение определенного времени? Это легко, если вы обойдете псевдослот :visited браузера и просто назначьте собственное имя класса. Использовать файлы cookie; у них есть встроенный срок действия.

Настройте обработчик JavaScript, когда вы нажимаете ссылки. Псевдокод:

function clickHandler(event) { 
    var href = /* (figure out which anchor was clicked and get the href) */ 
    // (you might need to escape the href) 

    setCookie(href, "visited", 5); // set cookie for 5 days 
} 

Он будет запускать эту функцию прямо перед тем, как она будет следовать по ссылке.

Затем на странице загрузки, вы можете сделать что-то вроде этого:

function markVisitedLinks() { 
    var anchors = document.getElementsByTagName("a"); 

    for (var i = 0; i < anchors.length; i++) { 
    if (readCookie(anchors[i].href) == "visited") { 
     anchors[i].className += " visited"; 
    } 
    } 
} 

Grab the setCookie and readCookie functions из QuirksMode.

1

Изменение работы ссылок обычно будет путать и/или опрокинуть ваших пользователей. Это надежный способ понизить воспринимаемое юзабилити вашего сайта.

Что вы действительно пытаетесь достичь?

Если у вас есть подстраницы на вашем сайте, которые меняют (указывая на новый контент), ваши пользователи будут считать это. Если у вас есть блестящая новая статья с двух или трех уровней в глубине вашей структуры страницы, добавьте новый раздел со ссылкой на главной странице, если это важно. (Или отправьте уведомление со ссылкой в ​​электронном письме или ...)

1

Достаточно ли просто форматировать свойство CSS :visited, чтобы оно выглядело так, как будто оно никогда не было нажато?

Я не знаю, хотите ли вы отслеживать посещаемые ссылки какое-то время или просто показывать их одинаково все время; если последний, то простой CSS (как показано ниже).

a, a:visited { 
    color: blue; 
    text-decoration: underline 
} 

a:hover, a:active { 
    color: orange; 
}