2013-02-27 2 views
4

Некоторое время в Firefox был взломан ярлык, который я широко использовал, для меня. Он может применяться к другим браузерам, но я использую его только в Firefox.Стилирование посещенных ссылок через букмарклет?

Этот ярлычок является "спрятанный посетитель" от squarefree.

Поскольку это не работает (правильно) я решил на него я и в конечном итоге с этим:

javascript:(
function(){ 
var css=document.createElement('style'); 
css.type='text/css'; 
var styles='a%3Avisited{display%3Anone !important}'; 
css.appendChild(document.createTextNode(styles)); 
document.getElementsByTagName("head")[0].appendChild(css); 
})(); 

разбивается на несколько строк для удобства чтения, в противном случае немодифицированного от того, что я использую.
Дело в том, что оно добавляет встроенную таблицу стилей в голову, она просто не изменяет внешний вид ссылок. Как только я удаляю :visited (или , как он появляется здесь), однако, таблица стилей применяется к ссылкам, и они скрыты, хотя очевидно, что скрытие выполняется независимо от их посещенного состояния на данном этапе.

Нижняя линия здесь заключается в том, что я считаю, что есть проблема с :visited и переворачивание bool для layout.css.visited_links_enabled примерно: config, как ожидается, ничего не делает, поскольку это просто удаляет стиль из посещенных ссылок оптом. Это нежелательно. :)

Возможно, стоит отметить, что букмарклет без квадратов по-прежнему добавляет свой материал в голову, он просто не имеет никакого эффекта.

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

ответ

4

Поведение :visited изменилось несколько лет назад из-за соображения безопасности ... в то время как ваш код (и бесквадратный букмарклет) могут работать на старые браузеры, вы не сможете получить тот же эффект, в последних версиях браузеров

записка от https://blog.mozilla.org/security/2010/03/31/plugging-the-css-history-leak/

  • Просмотренные ссылки могут быть только разные цвета: на переднем плане, фон, наброски, границы, SVG хода и заливки.Все другие изменения стиля либо утечки посещаемости ссылки путем загрузки ресурса или изменения позиции или размера стилизованного контента в документе, которые могут быть обнаружены и использованы для идентификации посещенных ссылок.

Другие полезные ссылки:


Для CSS вам, может попробовать что-то вроде:

a:visited { 
    color: white !important; /* It would hide the text if the background is white too */ 
    /* or some better css approach for your requirement */ 
} 
+0

Я прочитал первую ссылку, которую вы предоставили, и мне никогда не приходило в голову, что это будет только запрещать определенный набор инструкций. Хотя ваш цветной вариант для ссылок работает (несмотря на правило ': visited' ...), он не совсем сокращает его для моих целей. Тем не менее, интересно видеть, что это действительно работает, и это заставляет меня задаться вопросом, может быть, есть место для большего мастерства. Спасибо! :) – grimman

1

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

1

В целях безопасности браузеры предприняли шаги, чтобы предотвратить «просматриваемый» статус ссылок от чтения JavaScript. Это означает, что любой стиль, который вы применяете для «посещения» через CSS, не будет зарегистрирован в DOM.

Вы можете изменить цвет фона и текста (возможно), и пользователь увидит изменение на экране, но результат не будет читаться JS.

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

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