...

View Full Version : Slight modification to e-mail concealer script



canadianjameson
08-23-2007, 11:39 PM
Bah, it's raining hard :(

Hi all :D

I'm using a neat little script that prevents harvesters from gathering e-mail addresses but I need it to do something slightly different.

the script is here:
http://www.javascriptkit.com/script/script2/antispamemail.shtml

What I like about it is that I can create a whole array of e-mail addresses within the script and display them as I wish using
<script>displaycontact(contacts[0], "emails", "text", "")</script>
and the array looks like this:

// Anti-Spam Email Displayer- By JavaScriptKit.com
// Visit JavaScript Kit (http://javascriptkit.com) for this script and more.
// This notice must stay intact for use

var contacts=new Array()
//Specify text and corresponding email address.
//Use [at] and [dot] in place of "@" and "." for anti spam purpose:
contacts[0]=["Chris Timber", "chris[at]whatever[dot]com"]
contacts[1]=["John Doe", "johndoe[at]whatever2[dot]com"]
contacts[2]=["Jannet Low", "janet[at]whatever3[dot]com"]
contacts[3]=["Albert Good", "albertgood[at]whatever4[dot]com"]


//Specify caption text to display within SELECT menu. Only applicable if you're using the form option:
var dropmenucaption="CONTACT US FORM "

function displaycontact(emailarray, cssclass, displaymethod, extrainfo){
if (displaymethod=="text"){
document.write('<span class="' + cssclass + '">\n')
if (typeof emailarray[0]=="object"){ //if array passed consists of multiple elements
for (i=0; i<emailarray.length; i++){
var seperator=(i<emailarray.length-1)? extrainfo : ""
document.write('<a href="mailto:' + modifyemail(emailarray[1])+ '">'+ emailarray[i][0] + '</a>' + seperator)
}
}
else //else if it is a single array element
document.write('<a href="mailto:' + modifyemail(emailarray[1])+ '">'+ emailarray[0] + '</a>')
document.write('</span>')
}
else if (displaymethod=="form"){
document.write('<form>\n')
document.write('<select size="' + extrainfo + '" onChange="jumptooption(this)" class="' + cssclass + '">\n')
document.write('<option value="caption">' + dropmenucaption + '</option>\n')
for (i=0; i<emailarray.length; i++)
document.write('<option value="mailto:' + modifyemail(emailarray[i][1]) +'">' + emailarray[i][0] + ' </option>\n')
document.write('</select></form>\n')
}
}

function modifyemail(emailitem){
var modified=emailitem.replace(/\[aux]/gi, "@")
modified=modified.replace(/\[point]/gi, ".")
return modified
}

function jumptooption(themenu){
if (themenu.options[themenu.selectedIndex].value !="caption")
location=themenu.options[themenu.selectedIndex].value
}

//USAGE INSTRUCTION. displaycontact(1st paramter, "2nd paramter", "3rd paramter", "4th paramter")
//1st parameter: Input the name of the array containing the list of email addresses. To display one single email, input the corresponding array element.
//2nd parameter: Input the CSS Classname that is to be applied. Enter arbitrary name for none.
//3rd parameter: Input either "form" or "text." Former will display email in drop down menu. Later in plain text. Only "text" mode supports displaying of single email address!
//4th parameter: If in "form" mode, enter an integer to control the height of the <SELECT> tag. If "text" mode, enter any string to act as a divider between each email text. For example "|", "<br>" etc.

//SAMPLE USAGES (uncomment below to see)
//displaycontact(contacts, "textstyle", "text", " | ")

//displaycontact(contacts, "formstyle", "form", "1")

//displaycontact(contacts[2], "textstyle", "text", "")


... what I need to change is that, for my current application, i need to display the user's e-mail address itself, such as


var contacts=new Array()
//Specify text and corresponding email address.
//Use [at] and [dot] in place of "@" and "." for anti spam purpose:
[B]contacts[0]=["chris[at]whatever[dot]com", "chris[at]whatever[dot]com"]
contacts[1]=["johndoe[at]whatever2[dot]com", "johndoe[at]whatever2[dot]com"]

but doing so does not convert the [at] or [dot] to the @ or . symbol like it does in the second part of the array, which is what i need :D:p

Can anyone help me make that change (preferably keeping intact the original functionality so i can use the script in both situations in the future)

I envisioned something like


<script>displayNameAndEmail(contacts[0], "emails", "text", "")</script>
[I]for what it does now

and
<script>displayEmail(contacts[0], "emails", "text", "")</script>
for displaying only the e-mail when the link you want viewable isn't the persons name but the e-mail address itself (while maintaining the anti-harvester spirit :p:D

vwphillips
08-24-2007, 01:42 AM
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>
<title></title>
</head>

<body>
<script language="JavaScript" type="text/javascript">
<!--
// Anti-Spam Email Displayer- By JavaScriptKit.com
// Visit JavaScript Kit (http://javascriptkit.com) for this script and more.
// This notice must stay intact for use

var contacts=new Array()
//Specify text and corresponding email address.
//Use [at] and [dot] in place of "@" and "." for anti spam purpose:
contacts[0]=["Chris Timber", "chris[at]whatever[dot]com"]
contacts[1]=["John Doe", "johndoe[at]whatever2[dot]com"]
contacts[2]=["Jannet Low", "janet[at]whatever3[dot]com"]
contacts[3]=["Albert Good", "albertgood[at]whatever4[dot]com"]


//Specify caption text to display within SELECT menu. Only applicable if you're using the form option:
var dropmenucaption="CONTACT US FORM "

function displaycontact(emailarray, cssclass, displaymethod, extrainfo){
if (displaymethod=="text"){
document.write('<span class="' + cssclass + '">\n')
if (typeof emailarray[0]=="object"){ //if array passed consists of multiple elements
for (i=0; i<emailarray.length; i++){
var seperator=(i<emailarray.length-1)? extrainfo : ""
document.write('<a href="mailto:' + modifyemail(emailarray[i][1])+ '">'+ modifyemail(emailarray[i][1]) + '</a>' + seperator)
}
}
else //else if it is a single array element
document.write('<a href="mailto:' + modifyemail(emailarray[1])+ '">'+ emailarray[1].replace('[at]','@').replace('[dot]','.') + '</a>')
document.write('</span>')
}
else if (displaymethod=="form"){
document.write('<form>\n')
document.write('<select size="' + extrainfo + '" onChange="jumptooption(this)" class="' + cssclass + '">\n')
document.write('<option value="caption">' + dropmenucaption + '</option>\n')
for (i=0; i<emailarray.length; i++)
document.write('<option value="mailto:' + modifyemail(emailarray[i][1]) +'">' + emailarray[i][0] + ' </option>\n')
document.write('</select></form>\n')
}
}

function modifyemail(emailitem){
var modified=emailitem.replace(/\[aux]/gi, "@")
modified=modified.replace(/\[point]/gi, ".")
return modified
}

function jumptooption(themenu){
if (themenu.options[themenu.selectedIndex].value !="caption")
location=themenu.options[themenu.selectedIndex].value
}

//USAGE INSTRUCTION. displaycontact(1st paramter, "2nd paramter", "3rd paramter", "4th paramter")
//1st parameter: Input the name of the array containing the list of email addresses. To display one single email, input the corresponding array element.
//2nd parameter: Input the CSS Classname that is to be applied. Enter arbitrary name for none.
//3rd parameter: Input either "form" or "text." Former will display email in drop down menu. Later in plain text. Only "text" mode supports displaying of single email address!
//4th parameter: If in "form" mode, enter an integer to control the height of the <SELECT> tag. If "text" mode, enter any string to act as a divider between each email text. For example "|", "<br>" etc.

//SAMPLE USAGES (uncomment below to see)
//displaycontact(contacts, "textstyle", "text", " | ")

//displaycontact(contacts, "formstyle", "form", "1")

displaycontact(contacts[2], "textstyle", "text", "")
//-->
</script>
</body>

</html>

canadianjameson
08-24-2007, 06:53 PM
absolutely fantastic :)

Thank you Vic :D

canadianjameson
08-24-2007, 09:30 PM
Actually Vic I do get one error, although it displays properly

Line 29 i get "emailarray has no properties" when using firebug, and 'undefined is a null or not an object' in IE

is it possible that the variable hasn't been created yet when it's called?

vwphillips
08-24-2007, 10:48 PM
I only changed this line

('<a href="mailto:' + modifyemail(emailarray[1])+ '">'+ emailarray[1].replace('[at]','@').replace('[dot]','.') + '</a>')
document.write

and I'm not sure that it offers the same protection

also as its using the depreciated doc.write


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>
<title></title>
<script language="JavaScript" type="text/javascript">
<!--
var Contacts=new Array()
//Specify text and corresponding email address.
//Use [at] and [dot] in place of "@" and "." for anti spam purpose:
Contacts[0]=['Chris Timber', 'chris[at]whatever[dot]com']
Contacts[1]=['John Doe', 'johndoe[at]whatever2[dot]com']
Contacts[2]=['Jannet Low', 'janet[at]whatever3[dot]com']
Contacts[3]=['Albert Good', 'albertgood[at]whatever4[dot]com']


function zxcConvertEmail(zxctag,zxcary,zxccngtxt){
var zxctags=document.getElementsByTagName(zxctag);
for (var zxc0=0;zxc0<zxctags.length;zxc0++){
for (var zxc0a=0;zxc0a<zxcary.length;zxc0a++){
if (zxctag.toUpperCase()=='A'&&zxctags[zxc0].href){
var zxchref=decodeURI(zxctags[zxc0].href);
if (zxchref.match(zxcary[zxc0a][0])){
var zxcaddress=zxcary[zxc0a][1].replace('[at]','@').replace('[dot]','.');
zxctags[zxc0].href='mailto:'+zxcaddress;
if (zxccngtxt) zxctags[zxc0].innerHTML=zxctags[zxc0].innerHTML.replace(zxcary[zxc0a][0],zxcaddress);
}
}
}
}
}

//-->
</script>

</head>

<body onload="zxcConvertEmail('A',Contacts,true);">
<a ></a>
<a href="mailto:Chris Timber" >Chris Timber</a>

</body>

</html>

again I'm not sure that it offers the same protection

canadianjameson
08-29-2007, 03:37 PM
I responded in the other thread as requested



EZ Archive Ads Plugin for vBulletin Copyright 2006 Computer Help Forum