Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Chrome-задачка. Определить цвет visited-ссылки


Автор: dmitryf 23.2.2011, 10:19
Всем здравствуйте. Столкнулся с необходимостью определить, была ли посещена ссылка или нет. Для этого делаю visited-стиль, назначаю его ссылке, а затем проверяю, если цвет у ссылки как у стиля, значит ссылка посещена. Такое работает во всех браузерах, кроме Chrome: в нём цвет у посещенной и не посещенной ссылок одинаковый.  Бьюсь над вопросом уже который день, идей больше нет. Либо это баг хрома, либо у него стоит какая-то защита. Ниже код:

Код
<html>
<head>

<style>
.my a:visited {color: #800080;}
</style>

<script>
function getStyle(elem, name) {
    // J/S Pro Techniques p136
    if (elem.style[name]) {
        return elem.style[name];
    } else if (elem.currentStyle) {
        return elem.currentStyle[name];
    }
    else if (document.defaultView && document.defaultView.getComputedStyle) {
        name = name.replace(/([A-Z])/g, "-$1");
        name = name.toLowerCase();
        s = document.defaultView.getComputedStyle(elem, "");
        return s && s.getPropertyValue(name);
    } else {
        return null;
    }
}
</script>
</head>

<body>
<a href="http://google.com" class="my" id="my">google</a>

<script>
var obj=document.getElementById('my');
alert(getStyle(obj, 'color'));
</script>
</body>
</html>


Разъясню. Мы выводим ссылку http://google.com с классом my. Далее, просто выводим свойство color алертом. У посещенной и не посещенной ссылок цвет различается (у посещенной становится #800080 или rgb[85, 26, 139]). Но только не в Хроме.

Буду благодарен за помощь.

Автор: Amphiluke 23.2.2011, 10:29


Цитата(dmitryf @  23.2.2011,  13:19 Найти цитируемый пост)
Код

<style>.my a:visited {color: #800080;}</style>

Вы в курсе, что этот стиль назначается не вашей ссылке, а несуществующей ссылке, помещенной в контейнер с классом "my" ?

Попробуйте так:
Код

.my:visited {color: #800080;}

Автор: dmitryf 23.2.2011, 11:15
Цитата(Amphiluke @ 23.2.2011,  10:29)
Цитата(dmitryf @  23.2.2011,  13:19 Найти цитируемый пост)
Код

<style>.my a:visited {color: #800080;}</style>

Вы в курсе, что этот стиль назначается не вашей ссылке, а несуществующей ссылке, помещенной в контейнер с классом "my" ?

Попробуйте так:
Код

.my:visited {color: #800080;}

Видимо, в браузерах сделана защита от подобных ошибок. Я поправил, ничего не изменилось. Работает везде, кроме Chrome...

Добавлено через 6 минут и 37 секунд
В Хроме, если делать инспекцию элемента через отлидчик, то в Computed Style четко прописан цвет #800080; А вот если брать его яваскриптом, то выдается rgb(0, 0, 238), т.е. цвет не посещенной ссылки...

Автор: Amphiluke 23.2.2011, 11:24
Не знаю, у меня в Chrome изменение цвета ссылки нормально детектируется. smile

Добавлено через 1 минуту и 41 секунду
Правда, у меня Chrome очень старый, может быть, в новых версиях что-то изменено…

Автор: dmitryf 23.2.2011, 11:34
Да, не уточнил. Версия Chrome 9.0.597.98 На более старых не проверял.

Автор: SelenIT 23.2.2011, 13:02
Это фича, во имя прекращения http://www.startpanic.com/. В новом FF (4-м) http://habrahabr.ru/blogs/css/89537/. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)