Detect visited links
Доброго времени суток!
Появилась необходимость написать скрипт, который будет проверять несколько сайтов на посещаемость юзером. Сразу же на ум пришла такая идея: var links = document.querySelectorAll('a:visited'); Но не всё так просто, браузер не даёт получить такие ссылки. Далее на ум приходит такая идея: с помощью CSS дать определённый цвет текста для :visited и проверять его с помощью getComputedStyle, но не всё так просто... браузер и это блокирует! Ну и тут мне на ум пришла такая мысль: Мы знаем, что по умолчанию все ссылки синие, а visited - розовые. А что, если visited покрасить в чёрный и наложить 10к ссылок друг на друга? Ведь "чёрные" ссылки по идее должны отрисоваться быстрее. Набросал такой скрипт: .links { position: absolute; } .links a { left: 0; position: absolute; top: 0; } .links a::after { content: 'abcdefghijklmnopqrstuvwxyz1234567890'; } .links a:visited { color: #000; } .links span { opacity: 0.004; } window.addEventListener('DOMContentLoaded', function() { 'use strict'; function getDrawTime(link) { //Сохраняем начальный timestamp var d = Date.now(); //Создаём и вставляем 10000 элементов наложением друг на друга for(var el1, el2, i = 0; i < 1E4; i++) { el1 = document.createElement('span'); el2 = document.createElement('a'); el2.href = link; el1.appendChild(el2); wrapper.appendChild(el1); } //Записываем разницу между начального и текущего timestamp'а var r = Date.now() - d; //Удаляем все элементы while(wrapper.firstChild) { wrapper.removeChild(wrapper.firstChild); } //Вохвращем ту самую разницу return r; } var wrapper = document.createElement('div'); wrapper.className = 'links'; document.body.appendChild(wrapper); //Вычислям среднее время непосещённой ссылки, для следующего сравнения с посещённой var notVisitedTime = (function() { for(var i = 0, n = 0; i < 5; i++) { n += getDrawTime('http://' + Math.random().toString(36) + '.cx'); } return Math.floor(n / 5); })(); var callback = function(data) { console.log(data); }, i = 0, links = ['http://javascript.ru', 'http://test228.ru', 'http://google.ru'], visitedData = {}; setTimeout(function fn() { var link = links[i]; visitedData[link] = getDrawTime(link) < notVisitedTime - 10; if(++i < links.length) { setTimeout(fn, 10); } else { callback(visitedData); } }, 10); }); По началу, мне казалось, что всё работает как нужно, но всё-таки что-то не так. Каждый раз разный результат. У кого какие идеи и предложения, коллеги? |
|
рони, что-то я там не нашёл ответа. Неужели моим методом никак нельзя определить?
|
Ruslan_xDD,
вопрос старый, ответа нет ... можно разве что запоминать клик по ссылке http://javascript.ru/forum/jquery/46...tml#post309055 |
рони, нет, это вообще не то. Может есть идеи по перерисовки? Мне кажется, что можно как-то обхитрить замерами перерисовки.
|
Ладно, такой вопрос: какой цвет самый быстрый и какой цвет самый медленный в плане отрисовки в CSS?
Можно ведь ещё в сочетании с background-color сделать. Так вот, какие цвета для color/background-color лучше использовать для :visited и какие лучше для обычных ссылок? Чтобы время отрисовки было различимо и можно было понять, что из ссылок visited. Буду благодарен за ответы. |
Цитата:
Ели бы в CSS было бы не просто безопасный цвет задать, но и сказать, что работать с индексной палитрой при этом, тогда бы еще можно было говорить о выгоде. В индексной палитре нужно только указать индекс цвета, который требуется изменить, и во всех ячейках картинки он сразу будет заменен. Но это картинка, а на экране страница в итоге будет определена все равно глубиной цвета, которая у системы. Или суть вопроса иная? ) |
Ruslan_xDD,
Информация о посещениях сайтов считается конфиденциальной. Потому для :visited есть ряд ограничений (по стилями т.д.), чтобы невозможно было что-то выяснить скриптом. Те препятствия, на которые ты наткнулся, не случайны. В браузерных расширениях - да, можно просто глянуть историю. |
laimas, странно, я проверял, линки чёрного цвета добавляются быстрее, чем линки синего. :)
|
Цитата:
Но если цвет не локальный, то без разницы какой он. :) |
Часовой пояс GMT +3, время: 16:13. |