Вычисление посещённых ссылок пользователя с помощью Javascript и DOM Level 2
Для этого нам нужен метод объекта window — getComputedStyle. В ИЕ как всегда всё непросто — у него есть свойство currentStyle элемента.
Ниже — пример (ну его лучше бы немного усложнить — не нужен нам лишний div в дереве).
Пример. Вычисление посещённых ссылок
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
<style> a {color: rgb(255,0,0);} a:visited {color: rgb(0,255,0);} </style> <div style="display:none;"> <a href="http://12331231223.ru">1>/a> <a href="http://ya.ru">2>/a> </div> <script> //в ИЕ такого метода нету - декорируем //http://snipplr.com/view/13523/getcomputedstyle-for-ie/ if (!window.getComputedStyle) { window.getComputedStyle = function(el, pseudo) { this.el = el; this.getPropertyValue = function(prop) { var re = /(\-([a-z]){1})/g; if (prop == 'float') prop = 'styleFloat'; if (re.test(prop)) { prop = prop.replace(re, function (){return arguments[2].toUpperCase();}); } return el.currentStyle[prop] ? el.currentStyle[prop] : null; } return this; } } var links = document.getElementsByTagName('a'); var msg = ''; for (var i = 0; i < links.length; ++i) { var link = links[i]; var computedStyle = getComputedStyle(link, null); var visited = false; var color = computedStyle.getPropertyValue('color'); if (color == 'rgb(0, 255, 0)'/*ff*/ || color == 'rgb(0,255,0)'/*ie*/ || color == '#00ff00'/*opera*/) visited = true; msg += link.href + ' ' + ((visited) ? 'visited' : 'not visited') + '\n'; } alert (msg); </script> |
Есть у браузеров как всегда забавные особенности — при получении вычисленного цвета
- Firefox всегда возвращает строку вида ‘rgb(0, 255, 0)‘
- Internet Explorer — ровно то, что записано в стиле: написали ‘rgb(0,255,0)‘ — получили их «на выходе», написали ‘#0f0‘ — ровно эту же строку и получили (хотя если написать в стилях ‘rgb(0, 255, 0)‘, то получим ‘rgb(0,255,0)‘, т.е. пробелы видимо режет)
- Opera возвращает строку вида ‘#00ff00‘
Similar Posts
LEAVE A COMMENT
Для отправки комментария вам необходимо авторизоваться.
One Response so far.