Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery
 
PerlMonks  

Testing for JavaScript

by akm2 (Scribe)
on Mar 13, 2001 at 20:32 UTC ( [id://64137]=sourcecode: print w/replies, xml ) Need Help??
Category: CGI Programming
Author/Contact Info Andrew Kenton Mitchell Andrew@AndrewKMitchell.com http://www.AndrewKMitchell.com
Description: I had a situation where I needed to know if my visitor's browers supported JavaScript. Here is the code I used.
#!/usr/bin/perl

#Hash Array containg list of pages to display depending on test result
+s.
%resultURLs = (
                'PASS', 'http://www.mscorp.org/cgi-bin/invo.pl',
                'FAIL', 'http://www.mscorp.org/js/invorder.pl/nojs.htm
+l'
               );
#URL of this script.
$scriptURL = "/cgi-bin/invorder_djs.pl";

#Read hidden form results and decide what to do.
require "lib/cgi-lib.pl";  #You can use CGI.pm if you like.
&ReadParse;
if (!$in{'jstest'}){
&runJSTest;
}
else{
$result = uc $in{'jstest'};
$url = $resultURLs{$result};
print "Location: $url\n\n";
exit;
}
#Print HTML output that handles the testing.
sub runJSTest{
print <<END_OF_HTML;
<html>
<head>
<title>CHECKING YOUR SYSTEM FOR INSTALLED COMPONENTS...</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1
+">
#Redirect to error page if JavaScript found within 5 seconds.
<meta http-equiv="refresh" content="5;URL=$scriptURL?jstest=fail">
</head>

<body bgcolor="#FFFFFF" onload="testJS()">
<script language="JavaScript">
<!--
#If JavaScript is enabled this functions is run thereby returning a va
+lue of true.
function testJS() {
          document.jstestform.submit();
}

//-->
</script>
<table width="7%" border="0" cellspacing="0" cellpadding="0" align="ce
+nter">
  <tr>
    <td nowrap align="center"> 
      <p><b><font face="Arial">PLEASE&nbsp;WAIT<b><img src="/images/pe
+riod_ani.gif" width="18" height="12"></b></font></b></p>
      <p><font face="Arial"><b>CHECKING&nbsp;YOUR&nbsp;SYSTEM&nbsp;FOR
+&nbsp;INSTALLED&nbsp;COMPONENTS<img src="/images/period_ani.gif" widt
+h="18" height="12"></b></font></p>
      <p><b><tt><font face="Arial">IF&nbsp;THIS PAGE&nbsp;DOES&nbsp;NO
+T&nbsp;CHANGE&nbsp;WITHIN&nbsp;10&nbsp;SECONDS,&nbsp;PLEASE&nbsp;<a h
+ref="$scriptURL?jstest=fail">CLICK&nbsp;HERE</a>.</font></tt></b></p>
    </td>
  </tr>
</table>
#Hidden form that returns the results, if JavaScript is enabled.
<form name="jstestform" method="post" action="$scriptURL">
  <input type="hidden" name="jstest" value="pass">
</form>
</body>
</html>
END_OF_HTML
exit;
}

2001-03-13 Edit by Corion : Fixed formatting

2001-03-13 Edit by akm2 : Enhanced code readibility

Replies are listed 'Best First'.
Re: Testing for JavaScript
by arturo (Vicar) on Mar 13, 2001 at 20:42 UTC

    A few comments here that might help you improve the code, maintainability-wise.

    I'd use CGI for parsing the input, even if you don't like the code generation functions it provides (you appear to be working with some old docs, or is it an old version of Perl?)

    # to duplicate cgi-lib.pl and ReadParse (not that you need to -- you c +ould use more native CGI.pm methods) use CGI qw(param); my %in = map {$_ => param($_) } param;

    Instead of that gaggle of print statements, you might check out using "here documents", which work like:

    print <<END_OF_HTML; <html> <head> <title>Hi!</title> </head> <body> <h1>Javascript is $in{jstest}</h1> <p>Isn't that neat? </body> </html> END_OF_HTML

    I find that sort of thing easier to maintain and less visually messy (no escaping quotes!)

    Oh, and I *strongly* recommend use strict (and strict.pm, for that matter). Also, since this is a CGI, you should use the -T switch on your #! line.

    I like your use of the JS form submission, that's a good way around the problem with the cookie solution I suggested!

    Philosophy can be made out of anything. Or less -- Jerry A. Fodor

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: sourcecode [id://64137]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others taking refuge in the Monastery: (5)
As of 2024-04-19 02:50 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found