2011-03-22 14 views
6

Chrome ve Firefox için bir kullanıcı kitabı kullanıyorum ve kullanıcı tarafından ziyaret edilen bağlantıları kontrol ediyorum. Sayfa yüklenir yüklenmez benim css'deChrome'da Ziyaret Edilen Bağlantıyı Algıla

var. Ziyaret ettiğim sayfadaki a-linkler, varsayılan olarak mavi yerine kırmızı renktedir. Her linke

alert(window.getComputedStyle(document.getElementById("myLink"), null).getPropertyValue("color")) 

ve hepsi Firefox'ta ziyaret edilen bağlantılar için kırmızı dönmek fakat Chrome'da hepsi mavi dönmek: O zaman kullanın.

Chrome ile javascript kullanarak ziyaret edilen bağlantıların nasıl bulunacağını merak ediyordum. JQuery kodu veya normal javascript kodu iyidir. Şimdiden teşekkürler.

+1

Bu gizlilik hatasının Firefox'ta uzun bir süre önce giderildiğini düşündüm, bu yüzden orada çalışmamalı: http://blog.mozilla.com/security/2010/03/31/plugging-the-css-history-leak/ –

+0

Tamam, Firefox'ta false olarak layout.css.visited_links_enabled ayarlamayı denedim ve bağlantılar renk değiştirmiyor. Yani bu, kullanıcının daha önce sayfayı ziyaret edip etmediğini kontrol etmenin kesinlikle bir yolu olmadığı anlamına mı geliyor? – user654628

cevap

8

A_horse_with_no_name haklı. :visited güvenlik sorunu, tarayıcı satıcıları tarafından, şık bir demodan (Spyjax; artık değil) herhangi bir web sayfasının belirli bir URL'yi ziyaret edip etmediğinizi anlayabildiğini gösterdikten sonra düzeltildi. Bir bağlantıya getComputedStyle artık :visited rengini verir doğrulayabilirsiniz - hatta aynı etki alanı içinde: Bir kullanıcı bir URL ziyaret olup olmadığını tespit etmek istiyorsanız Chrome uzantıları için

// Test I used within the JS console. 
// :visited is no longer detectable by getComputedStyle. 
function getLinkColor(url) { 
    var a = document.createElement('a'); 
    a.href = a.textContent = url; 
    document.body.appendChild(a); 
    return document.defaultView.getComputedStyle(a, null).color; 
} 
getLinkColor('http://stackoverflow.com/questions/5394099/detect-visited-link-in-chrome'); 
getLinkColor('http://stackoverflow.com/some-fake-path'); 

, Sana bir düşünmek "history" iznini istemek ve chrome.history.getVisits'u aramak zorundayım.

+0

Yani bir kullanıcı dosyası kullanıyorum, bildirim dosyasına düzenleyemem, bu yüzden tarihe erişemediğim anlamına mı geliyor? Scriptimin Firefox ve Chrome'da çalışabilmesi için crossbrowser olarak kullanıyorum. Başka bir şey, görsel olarak ziyaret edilen bağlantıların değişikliğini görebilmenizdir (Chrome'da, bazı bağlantılar mavi ve bazıları kırmızıdır) ancak javascript bunların tümünü mavi olarak algılar. – user654628

+0

Doğru. Kullanıcı ziyaret için farklı bir renk görse de, tarayıcı güvenlik nedeniyle bu bilgiyi Javascript'ten gizler. Tarayıcıya özel geçmiş API'lerini kullanmanız gerekir. – yonran

+0

Teşekkürler, problem için farklı bir yaklaşım yapmaya karar verdim. Ziyaret edilen bağlantıların çoğunu (tıklama etkinliğinden sonra) localStorage'da (tüm URL'yi değil, yalnızca bir alan için) saklamaya karar verdim. – user654628