Используя javascript, чтобы пометить ссылку как посещенную
FF2 (по крайней мере) не помечен как ссылка как: посещенный, если он запускает обработчик onclick, не следуя за href. Я использую onclick для извлечения данных с сервера и изменения страницы, и укладка ссылок кажется здесь уместной. Но ссылка не отмечена как посещенная.
Есть ли способ перекрестного браузера пометить ссылку как посещенную? В противном случае существует ли способ определить браузер: посещенный стиль и применить его к ссылке?
Спасибо всем, кто ответил.
Похоже, ответы:
- Есть ли способ перекрестного браузера пометить ссылку как посещенную?
Нет, нет способа сделать это. Ссылки идентифицируются как посещенные, если href находится в истории браузера. - Есть ли способ определить браузер: посещенный стиль?
Нет, не только с помощью javascript.
Ответы
Ответ 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('')}