2013-04-16 2 views
2

document.querySelectorAll('a:visited') всегда возвращает пустой NodeList, даже если DOM имеет некоторые посещенные ссылки.document.querySelectorAll ('a: visited') не работает

Я пробовал его в Chrome. Есть ли какая-либо ошибка или это ожидаемое поведение?

В то время как :visited работает отлично, если я использую его в таблице стилей вместо querySelectorAll.

a:visited{ 
    color:yellow; 
} 

Я думаю, что псевдо-классы разрешены в качестве параметра querySelectorAll().

+0

Я думаю, что это невозможно из-за дизайна - иначе любой сайт сможет по существу прочитать мою историю. – Esailija

+1

По соображениям безопасности. Можно просто проверить, посещали ли вы сайт. Вот почему вы больше не можете использовать фоновые изображения в ': visited', см. Http://hacks.mozilla.org/2010/03/privacy-related-changes-coming-to-css-vistited/ – Zeta

ответ

6

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

В этом разделе приведена спецификация API-интерфейсов Selectors API: a section. Вот небольшой фрагмент кода отношение:

кража История потенциальная проблема конфиденциальности, поскольку :visited псевдо-класс селекторов позволяет авторам запроса, ссылки на которые были посещены.
...
Как определено в Селекторах ..., Пользовательские агенты могут обрабатывать все ссылки как не связанные ссылки.