2011-03-22 11 views
6

मैं क्रोम और फ़ायरफ़ॉक्स के लिए एक उपयोगकर्तास्क्रिप्ट का उपयोग कर रहा हूं और मैं उपयोगकर्ता द्वारा देखी गई लिंक की जांच कर रहा हूं। मेरे पासक्रोम में देखे गए लिंक का पता लगाएं

a{ 
    color: blue; 
} 

a:visited{ 
    color: red !important; 
} 

मेरे सीएसएस में पृष्ठ लोड होने के तुरंत बाद आयात किया गया है। जिस पृष्ठ पर मैंने देखा है उस पर एक लिंक नीले रंग के डिफ़ॉल्ट के बजाय रंग लाल है। मैं तो का उपयोग करें: प्रत्येक लिंक पर

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

और वे सभी Firefox में दौरा किया लिंक के लिए लाल लौट लेकिन क्रोम में वे सब नीले लौट आते हैं।

मैं सोच रहा था कि Chrome के साथ जावास्क्रिप्ट का उपयोग करके देखे गए लिंक को कैसे कार्यान्वित किया जाए। Jquery कोड या सामान्य जावास्क्रिप्ट कोड ठीक है। अग्रिम में धन्यवाद।

+1

मैंने सोचा कि यह गोपनीयता बग फ़ायरफ़ॉक्स में लंबे समय से तय किया गया है, इसलिए इसे वहां काम नहीं करना चाहिए: http://blog.mozilla.com/security/2010/03/31/plugging-the-css-history-leak/ –

+0

ठीक है, मैंने देखा, मैंने फ़ायरफ़ॉक्स में false.css.visited_links_enabled को गलत करने की कोशिश की और लिंक रंग नहीं बदलते हैं। तो इसका मतलब है कि यह जांचने का बिल्कुल कोई तरीका नहीं है कि उपयोगकर्ता पहले पृष्ठ पर गया है या नहीं? – user654628

उत्तर

8

A_horse_with_no_name सही है। निफ्टी डेमो (Spyjax; अब नहीं) के बाद, :visited सुरक्षा समस्या 2010 में ब्राउज़र विक्रेताओं द्वारा तय की गई थी, यह दर्शाता है कि कोई भी वेबपृष्ठ यह पता लगा सकता है कि आपने किसी दिए गए यूआरएल का दौरा किया है या नहीं। आप सत्यापित कर सकते हैं कि getComputedStyle एक लिंक पर नहीं रह गया है देता है :visited रंग - भले ही डोमेन के:

// 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'); 

क्रोम एक्सटेंशन के लिए, यदि आप पता लगाने के लिए एक उपयोगकर्ता एक यूआरएल का दौरा किया गया है या नहीं चाहते हैं, तो मैं आपको लगता है ' आपको "history" अनुमति का अनुरोध करना होगा और chrome.history.getVisits पर कॉल करना होगा।

+0

तो मैं एक उपयोगकर्तास्क्रिप्ट का उपयोग कर रहा हूं, मैं मैनिफेस्ट फ़ाइल में संपादित नहीं कर सकता, तो क्या इसका मतलब है कि मैं इतिहास तक पहुंच प्राप्त नहीं कर सकता? मैं फ़ायरफ़ॉक्स और क्रोम पर चलाने के लिए अपनी स्क्रिप्ट के लिए क्रॉसब्रोसर होने के लिए एक उपयोगकर्तास्क्रिप्ट का उपयोग कर रहा हूं। एक और बात यह है कि दृष्टि से आप देखे गए लिंक के लिए परिवर्तन देख सकते हैं (क्रोम पर, कुछ लिंक नीले हैं और कुछ लाल हैं) लेकिन जावास्क्रिप्ट उन्हें सभी को नीले रंग के रूप में पहचानता है। – user654628

+0

यह सही है। भले ही उपयोगकर्ता के लिए एक अलग रंग दिखाई देता है: विज़िट किया गया है, ब्राउज़र सुरक्षा कारणों से जावास्क्रिप्ट से इस जानकारी को छुपाता है। आपको ब्राउज़र-विशिष्ट इतिहास API का उपयोग करने की आवश्यकता है। – yonran

+0

धन्यवाद, मैंने समस्या के लिए एक अलग दृष्टिकोण करने का फैसला किया है। मैंने स्थानीय स्टोरेज (पूरे यूआरएल और सिर्फ एक डोमेन के लिए) में अधिकांश विज़िट किए गए लिंक (क्लिक ईवेंट के बाद) को स्टोर करने का निर्णय लिया है। – user654628