Подтвердить что ты не робот

Используя javascript, чтобы пометить ссылку как посещенную

FF2 (по крайней мере) не помечен как ссылка как: посещенный, если он запускает обработчик onclick, не следуя за href. Я использую onclick для извлечения данных с сервера и изменения страницы, и укладка ссылок кажется здесь уместной. Но ссылка не отмечена как посещенная.

Есть ли способ перекрестного браузера пометить ссылку как посещенную? В противном случае существует ли способ определить браузер: посещенный стиль и применить его к ссылке?

Спасибо всем, кто ответил.

Похоже, ответы:

  • Есть ли способ перекрестного браузера пометить ссылку как посещенную?
    Нет, нет способа сделать это. Ссылки идентифицируются как посещенные, если href находится в истории браузера.
  • Есть ли способ определить браузер: посещенный стиль?
    Нет, не только с помощью javascript.
4b9b3361

Ответ 1

Вот как я это сделал. Работает только в браузерах, которые поддерживают историю HTML5 api.

# store the current URL
current_url = window.location.href

# use replaceState to push a new entry into the browser history
history.replaceState({},"",desired_url)

# use replaceState again to reset the URL
history.replaceState({},"",current_url)

Использование replaceState означает, что кнопка "Назад" не будет затронута.

Ответ 2

Единственное обходное решение, о котором я знаю, будет следующим:

Скажите, что ваши посещенные ссылки красные:

<a href="#" onclick="someEvent();this.style.color='#ff0000'">link</a>

Но это не означает, что когда страница перезагружается, ссылки по-прежнему отмечены как посещенные.

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

Самым простым будет список, разделенный запятыми, который вы можете split() перед чтением. Это то, что вы делаете, когда страница перезагружается. Когда он разбивается, вы перебираете все идентификаторы и устанавливаете цвет в своих ссылках.

Например, используя jQuery:

// onclick
function saveID(id) {
  if ($.cookie('idCookie')) {
    $.cookie('idCookie', $.cookie('idCookie') + "," + id);
  } else {
    $.cookie('idCookie', id);
  }
}

// make all links colored
function setVisted() {
  var idArray = $.cookie('idCookie').split(',');
  for (var x=0; x<idArray.length; x++) {
    $('#' + idArray[x]).css('color', '#ff0000');
  }
}

// assign saveID()
$(document).ready(function(){
  $('a').click(function(){
    saveId($(this).attr('id'));
  });
  setVisited();
});

Я не тестировал этот код, но он должен заставить вас начать и дать вам представление. Если вам повезет, он вставляет и выигрывает.;-) Я также не исследовал, сколько вы можете хранить в cookie и каковы последствия производительности или какие другие ограничения применяются, также см. Мои комментарии.

Ответ 3

Применить класс, который имеет то же определение, что и: посещенный.

Ответ 4

Строго говоря, нет никакой вещи, как "посещенное" состояние для отдельных ссылок. Это сами URL-адреса, которые интерпретируются браузером как "посещенные". Любые ссылки, указывающие на URL-адрес в истории браузера, получат стилирование, определяемое псевдо-стилем: visited в вашем CSS.

Вы можете попытаться подделать его, установив местоположение скрытого iframe на нужный URL-адрес, но это не заставит текущую страницу повторно рисовать, поэтому я сомневаюсь, что вы увидите: обновленные обновления стиля w/oa обновить.

Для второй части вашего вопроса я, вероятно, поеду с ответом Джордана Джонса.

Ответ 5

Есть ли способ определить браузер: посещенный стиль?

Я бы сказал "да", поскольку текущий документ посещен, и вы можете найти его как цвет ссылок следующим образом: -

alert(mys_getLinkColor(top.location))


function mys_getLinkColor(href) {
var x, body, res=''
x = document.createElement('a')
x.href = href
body = document.getElementsByTagName('body')[0]
body.appendChild(x)
if(x.currentStyle) {
   res = x.currentStyle.color
}
else if(window.getComputedStyle) {
   res = window.getComputedStyle(x,null).color
}
return mys_rgbToHexColor(res) }


function mys_rgbToHexColor(v) { 
// E.g. 'rgb(5,2,11)' converts to "#05020b". All other formats returned unchanged.
var i
v = v.split('(')
if(!v[1]) return v[0]
v = v[1].replace(/ /g, '').replace(/\)/, '')
v = v.split(',')
for(i=0; i<v.length; i++) {
   v[i] = Number(v[i]).toString(16)
   if(v[i].length==1) v[i] = '0' + v[i]
}
return '#'+v.join('')}