Avatar billede jdjensen Juniormester
19. januar 2012 - 21:42 Der er 8 kommentarer og
1 løsning

Emailadresse spam protection

Jeg har et mailto link som jeg gerne vil kryptere for spam-bots.

Lige nu bruger jeg et javascript der automatisk indsætter emailadressen når jeg bruger denne linie på mine sider:
<span class="mailaddress"></span>

Det virker fint til de steder hvor emailaddressen bare står i fritekst, men kan jeg overhovedet bruge den i forbindelse med mailto hyperlinket:

<a href="<span class='insert-email'></span>">Send en mail</a>

Jeg skal bare have en java der virker med begge metoder... :)

Scriptet jeg bruger ser således ud:

$('.insert-email').html(function(){
    var a = "mail";
    var b = "@";
    var c = "domain";
    var d = ".dk";
    var h = 'mailto:' + a + b + c + d;
    $(this).parent('a').attr('href', h);
    return a + b + c + d;
});
Avatar billede olebole Juniormester
19. januar 2012 - 22:34 #1
<ole>

Nej, den er helt gal. Du kan under ingen omstændigheder have et span i en attribut.

Du skal vel lægge klassen på linket og så sætte href'en på alle links med den klasse.

/mvh
</bole>
Avatar billede jdjensen Juniormester
19. januar 2012 - 22:47 #2
Er jeg egentlig ikke nød til at have 2 forskellige funktioner?

Nogle gange vil jeg jo have en anchor-tekst som ikke er emailadressen men f.eks "Send en mail".

Jeg ved ikke lige hvordan det kan gøres på en elegant måde.
Avatar billede olebole Juniormester
19. januar 2012 - 23:12 #3
Jeg ved ikke, hvordan du skal bruge det, men du kunne gøre noget i stil med:

<script type="text/javascript">
function hasClass(elm, sCl) {
    var oX = hasClass.oRX;
    if (!oX[sCl]) oX[sCl] = new RegExp("\\b"+sCl+"\\b");
    if (elm.className && elm.className.match(oX[sCl])) return true;
    return false;
}
hasClass.oRX = {};
function getAuthor(elm, b) {
    var s = "mig@selv.dk";
    if (b) elm.setAttribute("href", "mailto:"+s);
    elm.firstChild.nodeValue = s;
}
function initEMails() {
    var aSp = document.getElementsByTagName("span"),
    aA = document.getElementsByTagName("a"),
    i = aSp.length, sCl = "author-name";
   
    while (i--) {
        if (hasClass(aSp[i], sCl)) getAuthor(aSp[i]);
    }
    i = aA.length;
    while (i--) {
        if (hasClass(aA[i], sCl)) getAuthor(aA[i], true);
    }
}
if (window.addEventListener) window.addEventListener("load", initEMails, false);
else if (window.attachEvent) window.attachEvent("onload", initEMails);
</script>

<p>
    Mig Selv: <span class="author-name">&nbsp;</span>
</p>
<p>
    <a class="author-name" href="#">&nbsp;</a>
</p>

- og der er jo ingen grund til at 'råbe botten ind i ansiget', at elementet har noget med en e-mail-adresse at gøre. Vælg derfor et andet klassenavn  *o)
Avatar billede jdjensen Juniormester
19. januar 2012 - 23:33 #4
Hehe nej det er self. rigtig. :)

Når jeg bruger disse:

- <span class="author-name">Send en mail</span>
- <a class="author-name" href="#">Send en mail</a>

Så bliver "Send en mail" i begge tilfælde overskrevet med emailadressen. Man når kun lige at se teksten "Send en mail" i et split-sekund.

Noget galt i funktionen?
Avatar billede jdjensen Juniormester
19. januar 2012 - 23:40 #5
Egentlig skal begge være aktive links man kan klikke på. Lad mig prøve at være mere præcis:

Der skal være 2 forskellige måde:

Option1: Emailadressen er et aktivt link men anchor teksten er "Send en mail"
Option2: Emailadressen er et aktivt link men anchor teksten er emailadressen. (Emailadressen er dog skjult i kildekoden for botterne)
Avatar billede olebole Juniormester
20. januar 2012 - 15:26 #6
Prøv dette:

<script type="text/javascript">
function hasClass(elm, sCl) {
    var oX = hasClass.oRX;
    if (!oX[sCl]) oX[sCl] = new RegExp("\\b"+sCl+"\\b");
    if (elm.className && elm.className.match(oX[sCl])) return true;
    return false;
}
hasClass.oRX = {};
function getAuthor(elm, b) {
    var o, s = "mig@selv.dk";
    if (b) elm.firstChild.nodeValue = s;
    else {
        o = document.createElement("a");
        o.appendChild(elm.firstChild);
        elm.appendChild(o);
        elm = o;
    }
    elm.setAttribute("href", "mailto:"+s);
}
function initEMails() {
    var aSp = document.getElementsByTagName("span"),
    aA = document.getElementsByTagName("a"),
    i = aSp.length, sCl = "author-name";
   
    while (i--) {
        if (hasClass(aSp[i], sCl)) getAuthor(aSp[i]);
    }
    i = aA.length;
    while (i--) {
        if (hasClass(aA[i], sCl)) getAuthor(aA[i], true);
    }
}
if (window.addEventListener) window.addEventListener("load", initEMails, false);
else if (window.attachEvent) window.attachEvent("onload", initEMails);
</script>

<p>
    Mig Selv: <span class="author-name">Send en e-mail</span>
</p>
<p>
    <a class="author-name" href="#">Send en e-mail</a>
</p>
Avatar billede jdjensen Juniormester
22. januar 2012 - 21:56 #7
Tak for hjælpen olebole det virker. :-)
Avatar billede olebole Juniormester
22. januar 2012 - 22:06 #8
Selvtak. Jeg samler som bekendt ikke point, så du lægger bare selv et svar og accepterer det  *o)
Avatar billede jdjensen Juniormester
23. januar 2012 - 13:26 #9
Super, tak. :-)

(Lukker)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester