UPDATE: Nachdem ich den Code eine Weile aus dem Spiel genommen habe, habe ich zwei Probleme bei Citrix und iOS Safari festgestellt. Beide scheinen um den Gebrauch von Eval herum zu sein. Das citrix Problem durch die Aktualisierung der CSS aufgelöst worden sein könnte:Referenzieren von in CSS gespeichertem JS-Code Inhaltseigenschaft
emailerrormessage = 'please enable Javascript'; ahref.attr('data-edomain') + '\0040' + ahref.attr('data-ename');
Das iOS Safari Problem war nicht etwas, was ich geschaffen zu lösen. Ich habe das CSS-Element komplett ausgeschnitten.
EDIT: Ich öffne diese Frage für Empfehlungen, warum meine Lösung als schlechte Programmierung im Allgemeinen betrachtet werden kann, und wenn jemand eine bessere Möglichkeit hat, Emails durch eine Kombination von CSS, HTML und JS zu verschleiern. Ich habe eine Antwort auf meine eigenen Ergebnisse hinzugefügt, aber ich habe sie nicht als die Antwort markiert, falls jemand anderes einen besseren Einblick in diese Technik hat.
Ich wurde beauftragt, E-Mail-Adressen auf einigen Webseiten zu verschleiern, und nachdem ich eine Antwort suggesting use of CSS and data attributes gefunden habe, habe ich versucht, es selbst zu implementieren und festgestellt, dass die produzierte E-Mail-Adresse in ein Mailto-Element ohne JavaScript nicht möglich war. Das nächste Problem war, dass das JavaScript, das ich zum Abrufen der gerenderten E-Mail-Adresse verwendete, nicht browserübergreifend war, da einige Browser "attr (data-xx)" anstelle des tatsächlichen Werts abrufen. Dennoch gefällt mir die Idee, eine Lösung zu erstellen, die HTML, JS und CSS für maximale Komplexität umfasst. Der letzte Ausweg bestand darin, eine JS-Zeile in der CSS-Inhaltseigenschaft zu speichern und mithilfe von eval die endgültige E-Mail-Adresse zu erstellen.
Verschleierung soll nicht hübsch sein, aber ich möchte wissen, ob das, was ich gemacht habe, potentiell die Sicherheit oder Leistung gefährdet, indem man eval() einführt und/oder JS in CSS speichert. Ich habe kein anderes Beispiel dafür gefunden, dass jemand etwas Ähnliches macht (vielleicht aus gutem Grund).
Mein HTML ist
<a class="redlinktext ninjemail" data-ename="snoitagitsevni" data-edomain="ua.moc.em" data-elinktext="click me"></a>
Meine CSS ist
.ninjemail:before {
content: "'please enable Javascript'; ahref.attr('data-edomain') + '\0040' + ahref.attr('data-ename');"
}
Mein JavaScript
ist$('.ninjemail').each(function() {
var fullLink = "ma";
var ahref = $(this);
fullLink += "ilto" + ":";
var codeLine = window.getComputedStyle(this, ':before').content.replace(/\"|\\/g, '');
var emailAddress = eval(codeLine);
emailAddress = emailAddress.split('').reverse().join('');
fullLink += emailAddress;
ahref.attr('href', fullLink);
var linkText = ahref.attr('data-elinktext');
if (linkText && linkText.length > 0) {
ahref.text(linkText);
} else {
ahref.text(emailAddress);
}
ahref.removeClass('ninjemail');
});
Daten wie E-Mail-Adressen gehören absolut nicht in das CSS. Sie sollten wirklich nur einige einfache Daten-Attribute verwenden. Bitte zeigen Sie uns den Code dieses Versuchs, und wir können Ihnen helfen, Probleme damit zu beheben. Ja, Sie werden immer JavaScript benötigen, um die eigentliche E-Mail in den mailto href zurück zu bekommen, wenn Sie nicht möchten, dass sie an erster Stelle für Verschleierungszwecke da ist. – Bergi
Sorry, aber ist der Code in meiner Frage nicht sichtbar? Ich habe bereits alle HTML-, CSS- und Javascript-Komponenten in diese Lösung einbezogen. In meinem Beispiel werden auch die Teile der E-Mail-Adresse in Datenattributen (Daten-Ename und Daten-Edomain) gespeichert. In der JS-Zeile, die in CSS gespeichert ist, wird nur das @ -Zeichen hinzugefügt. –
Nein, der Code ist sichtbar.Ich sage nur, dass Ihre letzte Möglichkeit, "* eine Zeile von JS in der CSS-Inhaltseigenschaft zu speichern und eval zu verwenden, um die endgültige E-Mail-Adresse * zu erstellen" ist eine schreckliche Idee. Von einer Benutzerfreundlichkeit, Leistung, Trennung von Bedenken und Sicherheitsperspektive. Halte es einfach. – Bergi