Это для исследовательских целей http://cssfingerprint.com
Рассмотрим следующий код:
<style>
div.csshistory a { display: none; color: #00ff00;}
div.csshistory a:visited { display: inline; color: #ff0000;}
</style>
<div id="batch" class="csshistory">
<a id="1" href="#" onclick="location.href='http://foo.com'; return false;">anything you want here</a>
<a id="2" href="#" onclick="location.href='http://bar.com'; return false;">anything you want here</a>
[etc * ~2000]
</div>
Моя цель - определить, была ли рендерирована foo с помощью: посещенного стиля.
-
Я хочу определить, посетил ли foo.com без прямого просмотра
$('1').getComputedStyle
(или в Internet Explorer,currentStyle
) или любого другого прямого метода для этого элемента.Цель этого заключается в том, чтобы обойти потенциальное ограничение браузера, которое предотвратило бы прямой контроль стиля посещенных ссылок.
Например, возможно, вы можете поместить подэлемент в тег
<a>
или напрямую проверить стиль текста; и т.д. Любой метод, который прямо или нецелесообразно полагаться на$('1').anything
, является приемлемым. Возможно, необходимо сделать что-то умное с ребенком или родителем.Обратите внимание, что только для целей этого сценария сценарий заключается в том, что браузер будет ссылаться на JavaScript обо всех свойствах элемента
<a>
(но не на других) и что он будет отображать толькоcolor:
в:visited
. Поэтому способы, которые полагаются, например, размер текста илиbackground-image
не будет соответствовать этому требованию. -
Я хочу улучшить скорость моих текущих методов скремблирования.
Большинство времени (по крайней мере, с помощью метода jQuery в Firefox) расходуется на
document.body.appendChild(batch)
, поэтому найти способ улучшить этот вызов, вероятно, будет наиболее эффективным.См. http://cssfingerprint.com/about и http://cssfingerprint.com/results для текущих результатов теста скорости.
Используемые мной методы можно увидеть на http://github.com/saizai/cssfingerprint/blob/master/public/javascripts/history_scrape.js
Подводя итоги для tl; dr, они:
- установите цвет или дисплей на: посещенный на каждый из них и проверьте каждый из них напрямую w/
getComputedStyle
- поместите идентификатор ссылки (плюс пробел) внутри тега
<a>
и с помощью jQuery: visible selector извлеките только видимый текст (= просмотренные идентификаторы ссылок)
FWIW, я белая шляпа, и я делаю это в консультации с EFF и некоторые другие довольно известные исследователи безопасности.
Если вы внесете новый метод или ускорителю, вы получите благодарность http://cssfingerprint.com/about (если вы хотите быть:-P ) и, возможно, в будущей опубликованной статье.
ETA: награда будет вознаграждена только за предложения, которые
- может в Firefox избегать гипотетического ограничения, описанного в пункте 1 выше, или
- выполняйте как минимум на 10% быстрее, в любом браузере, для которого у меня достаточно текущих данных, чем мои наилучшие методы, перечисленные на графике http://cssfingerprint.com/about
В случае, если более чем одно предложение соответствует любому критерию, выигрывает тот, который лучше всего выигрывает.
ETA 2: Я добавил варианты ширины двух предыдущих лучших методов тестирования (reuse_noinsert, лучше всего на Firefox/Mozilla и mass_insert, его очень близком конкуренте). Несколько раз просмотрите http://cssfingerprint.com из разных браузеров; Я автоматически получу результаты теста скорости, поэтому мы узнаем, насколько это лучше, чем предыдущие методы, и если да, то насколько. Спасибо!
ETA 3: Текущие тесты показывают экономию скорости, используя offsetWidth
(а не getCalculatedStyle
/currentStyle
) ~ 2 мс (1,8%) в Chrome и ~ 24 мс (4.3%) в Firefox, что не 10% я хотел получить солидную награду. Есть идея, как выложить остальную часть этого 10%?