J'ai trouvé une solution qui fonctionne dans Chrome et Firefox. J'ai mis en place le code dans un Script, de Ne pas suivre moi Google.
Démo (testé dans Firefox 9 et Chrome 17): http://jsfiddle.net/RxHw5/
Référent de la clandestinité pour Webkit (Chrome, ..)
Basé sur Webkit navigateurs (google Chrome, Safari) appuyer <a rel="noreferrer">
spec.
Référent de masquage peut être pleinement mises en œuvre en combinant cette méthode avec deux écouteurs d'événement:
-
mousedown
- Sur un clic, clic milieu, cliquez-droit sur contextmenu, ...
-
keydown
(Onglet Onglet Onglet ... Entrez).
Code:
function hideRefer(e) {
var a = e.target;
// The following line is used to deal with nested elements,
// such as: <a href="."> Stack <em>Overflow</em> </a>.
if (a && a.tagName !== 'A') a = a.parentNode;
if (a && a.tagName === 'A') {
a.rel = 'noreferrer';
}
}
window.addEventListener('mousedown', hideRefer, true);
window.addEventListener('keydown', hideRefer, true);
Référent de la clandestinité pour Firefox
Malheureusement, Firefox n'a pas (encore) de soutien rel="noreferrer"
[bug 530396].
Un data-URI + <meta http-equiv=refresh>
peut être utilisé pour masquer le référent dans Firefox et IE). La mise en œuvre de cette fonctionnalité est plus compliqué, mais nécessite également de deux événements:
-
click
- Sur un clic, sur le moyen-cliquez, Entrez
-
contextmenu
- Sur clic droit, Onglet Onglet ... Contextmenu
Dans Firefox, l' click
événement est déclenché pour chaque mouseup
et de frapper d' Entrée sur un lien (ou contrôle de formulaire). L' contextmenu
événement est nécessaire, parce que l' click
événement se déclenche trop tard pour ce cas.
Basé sur des données d'Uri et en une fraction de seconde délais d'attente:
Lorsque l' click
événement est déclenché, l' href
attribut est temporairement remplacé par un data-URI. L'événement terminé, et le comportement par défaut se produit: l'Ouverture de la data-URI, dépend de l' target
d'attribut et SHIFT/CTRL modificateurs.
Pendant ce temps, l' href
attribut est restauré à son état d'origine.
Lorsque l' contextmenu
événement est déclenché, le lien change également pour une fraction de seconde.
- L'
Open Link in ...
options ouvrir le data-URI.
- L'
Copy Link location
option fait référence à la restauration, URI originale.
- ☹ L'
Bookmark
option fait référence à la data-URI.
- ☹
Save Link as
de points à la data-URI.
Code:
// Create a data-URI, redirection by <meta http-equiv=refresh content="0;url=..">
function doNotTrack(url) {
// As short as possible. " can potentially break the <meta content> attribute,
// # breaks the data-URI. So, escape both characters.
var url = url.replace(/"/g,'%22').replace(/#/g,'%23');
// In case the server does not respond, or if one wants to bookmark the page,
// also include an anchor. Strictly, only <meta ... > is needed.
url = '<title>Redirect</title>'
+ '<a href="' +url+ '" style="color:blue">' +url+ '</a>'
+ '<meta http-equiv=refresh content="0;url=' +url+ '">';
return 'data:text/html,' + url;
}
function hideRefer(e) {
var a = e.target;
if (a && a.tagName !== 'A') a = a.parentNode;
if (a && a.tagName === 'A') {
if (e.type == 'contextmenu' || e.button < 2) {
var realHref = a.href; // Remember original URI
// Replaces href attribute with data-URI
a.href = doNotTrack(a.href);
// Restore the URI, as soon as possible
setTimeout(function() {a.href = realHref;}, 4);
}
}
}
document.addEventListener('click', hideRefer, true);
document.addEventListener('contextmenu', hideRefer, true);
Joindre les deux méthodes
J'ai créé un Script pour Chrome et Firefox. Le script a besoin d'une méthode efficace pour déterminer le référent de masquage méthode doit être utilisée. Pour obtenir cela, j'ai vérifié pour la validité d'un webkit
propriété CSS:
var isWebkit = document.createElement("a");
isWebkit.style.cssText = "-webkit-border-radius:1px;";
isWebkit = isWebkit.style.cssText.indexOf("radius") !== -1;
// Later: if (isWebkit) { /* Webkit-specific code */ } else { /* Other method */}