2011-03-22 19 views
6

Estoy usando un userscript para Chrome y Firefox y estoy buscando enlaces que haya visitado el usuario. TengoDetectar enlace visitado en Chrome

a{ 
    color: blue; 
} 

a:visited{ 
    color: red !important; 
} 

en mi css importado tan pronto como se carga la página. Los enlaces a en la página que he visitado son de color rojo en lugar de azul por defecto. Luego utilizo:

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

en cada enlace y todos vuelven de color rojo para los enlaces visitados en Firefox, pero en Chrome todos vuelven azules.

Me preguntaba cómo implementar la búsqueda de enlaces visitados mediante javascript con Chrome. El código de Jquery o el código de javascript normal está bien. Gracias por adelantado.

+1

Pensé que este error de privacidad se ha solucionado desde hace tiempo en Firefox, por lo que no debería funcionar allí: http://blog.mozilla.com/security/2010/03/31/plugging-the-css-history-leak/ –

+0

Ok, veo, probé a configurar layout.css.visited_links_habilitado en falso en Firefox y los enlaces no cambian de color. ¿Esto significa que no hay forma de verificar si el usuario ha visitado la página anteriormente? – user654628

Respuesta

8

A_horse_with_no_name is right. El problema de seguridad :visited fue solucionado en 2010 por los proveedores del navegador, después de una demostración ingeniosa (Spyjax; ya no más) demostró que cualquier página web podría descubrir si ha visitado alguna URL determinada. Puede verificar que getComputedStyle en un enlace ya no devuelve el color :visited - incluso dentro del mismo dominio:

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

Para extensiones de Chrome, si se quiere detectar si un usuario ha visitado una URL, creo que' Tendré que solicitar el permiso "history" y llamar al chrome.history.getVisits.

+0

Así que estoy usando un userscript, no puedo editar el archivo de manifiesto, ¿significa esto que no puedo acceder al historial? Estoy usando un userscript para ser un navegador cruzado para que mi script se ejecute en Firefox y Chrome. Otra cosa es que visualmente puedes ver el cambio para los enlaces visitados (en Chrome, algunos enlaces son azules y otros son rojos) pero el javascript los detecta a todos como azules. – user654628

+0

Eso es correcto. Aunque el usuario ve un color diferente para: visitado, el navegador oculta esta información de Javascript por razones de seguridad. Debe usar las API de historial específicas del navegador. – yonran

+0

Gracias, he decidido hacer un acercamiento diferente al problema. He decidido almacenar la mayoría de los enlaces visitados (después del evento click) en localStorage (no en la url completa y solo para un dominio). – user654628

Cuestiones relacionadas