Browserjump
Dieses Skript prüft welcher Browser der Surfer benutzt und gibt dementsprechend eine browserspezifische Seite zurück.
Source Code und Datendateien
| Perl Sourcecode | |
| browserjump.pl | Das Skript Browserjump |
Wirkungsweise
- Sie benutzen
-
Dieser Link leitet Netscape-Browser zu einer Rose, Microsoft-Browser auf eine Mülltonne
und sonstige Browser zu einem Teufelchen.
Bitte denken Sie daran, daß die Argumente, wie /misc/browserjump/blume.html URL's sein sollten. Wenn wie hier ein relativer Link angegeben ist, dann bezieht er sich auf die Domain und ggf. den Pfad, auf der das Skript liegt. Auf der sicheren Seite ist man, wenn man eine vollständige URL angibt wie: http://cgi.xwolf.de/misc/browserjump/blume.html. - Je nach Browser steht in dem folgenden Feld ein Bild.
- Netscape-User bekommen eine Rose,
- Microsoft eine Mülltonne
- und alle anderen Browser einen kleinen Teufel
#!/local/bin/perl5 ############################################################################## # $Id: browserjump.cgi,v 1.1 2003/05/21 14:41:11 xwolf Exp $ # # COPYRIGHT NOTICE # # Copyright 1999 Wolfgang Wiese All Rights Reserved. # # EMail: xwolf@xwolf.com # # URL : http://www.xwolf.com # # # # This script may be used and modified free of charge by anyone so long as # # this copyright notice and the comments above remain intact. By using this # # code you agree to indemnify Wolfgang Wiese from any liability that # # might arise from it's use. # # # # Selling the code for this program without prior written consent is # # expressly forbidden. In other words, please ask first before you try and # # make money off of my program. # # # # Obtain permission before redistributing this software over the Internet or # # in any other medium. In all cases copyright and header must remain intact.# ############################################################################## # Last Modified on: $Date: 2003/05/21 14:41:11 $ # By: $Author: xwolf $ # Version: $Revision: 1.1 $ ############################################################################## $NEED_ELSE=0; # If 1, then the user has to give a page where other browser will be directed to # If 0, then other browser will see nothing; If its redirect=1, then there will # come a message, that there is no url to address ################################################################################ # Main program after this point. Don't change ################################################################################ &ReadParse; $version = $in{'version'}; $microsoft= $in{'Microsoft'} || "../misc/tonne.html"; $netscape = $in{'Netscape'} || "../misc/blume.html"; $aol = $in{'AOL'}; $else = $in{'else'}; $opera = $in{'Opera'}; $lynx = $in{'Lynx'}; $redirect = $in{'redirect'}; if ((length($else) < 5) && ($redirect !=2)) { if (!($microsoft) && !($netscape) && !($aol) && !($opera) && !($lynx)) { $redirect=0; } else { if ($NEED_ELSE) { &Fehlermeldung("Geben Sie eine Ausweichseite an, für sonstige Browser!"); } } } ($browser,$bversion)=split(/,/,&GetBrowserName($ENV{'HTTP_USER_AGENT'})); if ($redirect==1) { # Hier nimmt er die Werte die bei den Browsern als URLs if (($microsoft) && ($browser =~ /Microsoft/i)) {&Redirect($microsoft);} elsif (($aol) && ($browser =~ /AOL/i)) {&Redirect($aol);} elsif (($netscape) && ($browser =~ /Netscape/i)) {&Redirect($netscape);} elsif (($opera) && ($browser =~ /Opera/i)) {&Redirect($opera); } elsif (($lynx) && ($browser =~ /Lynx/i)) {&Redirect($lynx); } else { if ((length($else) < 5) && (!($NEED_ELSE))) { if ($HEADER) {print(&PrintHeader);} print "No page for $browser "; print "
You are using the browser "; print "$browser, Version $bversion"; print "Unluckily we arn't able to create pages for this browser.
"; print "
For questions, please ask the webmaster of this domain"; print " $ENV{'SERVER_ADMIN'}."; print "
"; } else { &Redirect($else); } } } elsif ($redirect==2) { # Hier nimmt er die Werte die bei den Browsern als URLs if (($microsoft) && ($browser =~ /Microsoft/i)) { &PrintHTML($microsoft); } elsif (($aol) && ($browser =~ /AOL/i)) { &PrintHTML($aol); } elsif (($netscape) && ($browser =~ /Netscape/i)) { &PrintHTML($netscape); } elsif (($opera) && ($browser =~ /Opera/i)) { &PrintHTML($opera); } elsif (($lynx) && ($browser =~ /Lynx/i)) { &PrintHTML($lynx); } else { &PrintHTML($else); } } else { # Gibt die Browserstats auf den Bildschirm aus print(&PrintHeader); if ($ENV{'HTTP_REFERER'} =~ /\.shtml/i) { print "BrowserJump: BrowserStats \n"; print "\n"; print "BrowserJump: BrowserStats
\n"; print "
You are currently using:
\n"; } print "- $browser, Version $bversion
\n"; if ($ENV{'HTTP_REFERER'} =~ /\.shtml/i) { print "
\n"; print "Skript by xwolf\n"; print "\n"; print "\n"; print "\n"; } } exit(0); ############################################################################## # Subroutinen ############################################################################## sub ReadParse { local($buffer); local($namebuffer,$valuebuffer); if ($ENV{'REQUEST_METHOD'} eq "GET") { $buffer = $ENV{'QUERY_STRING'}; } else { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } if (!($buffer)) {$buffer=substr($ENV{'PATH_INFO'},1,length($ENV{'PATH_INFO'}));} if (!($buffer)) {$buffer=@ARGV; } @nvpairs = split(/&/,$buffer); foreach $pair (@nvpairs) { ($namebuffer, $valuebuffer) = split(/=/, $pair); $valuebuffer =~ tr/+/ /; $valuebuffer =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; if (exists($in{$namebuffer})) { if ($in{$namebuffer} ne '#VALUE_CHECKBOX') { push(@{$value_checkbox{$namebuffer}},$in{$namebuffer}); $in{$namebuffer}="#VALUE_CHECKBOX"; } push(@{$value_checkbox{$namebuffer}},$valuebuffer); } else { $in{$namebuffer}=$valuebuffer; } } } ############################################################################## sub PrintHeader { return "Content-type: text/html\n\n"; } ############################################################################## sub Redirect { my($url)=@_; print "Status: 302 Found\n"; print "Location: $url\n"; print "URI: <$url>\n"; print "Content-type: text/html\r\n\r\n"; exit(1); } ############################################################################## sub Fehlermeldung { my($meldung)=@_; print(&PrintHeader); print ""; print "
\n"; print " \n"; print "Fehler
"; print "$meldung\n"; print "
\n"; exit(1); } ############################################################################## sub PrintHTML { my($page)=@_; # To make sure, noone plays bad tricks: $page =~ s/[^a-zA-Z0-9\/\.]+//g; print(&PrintHeader); open(f1,"<$page") || &Fehlermeldung("Die Datei $page konnte nicht geoeffnet werden!"); while() { chop($_); print $_; } close f1; } ############################################################################## sub GetBrowserName { my ($kennung)=@_; my ($bname)="Unknown Browser"; my ($version)=0; my ($result)="$bname,$version"; if ($kennung =~ /Mozilla/) { # Alle Browser, die die Mozilla-Kennung benutzen.... if (($kennung =~ /MSIE/) || ($kennung =~ /Microsoft Internet Explorer/)) { $bname='Microsoft Internet Explorer'; $version=substr($kennung,index($kennung,"MSIE")+5,length($kennung)); $version=substr($version,0,index($version,";")); if ($kennung =~ /MSIECrawler/) { $version=$version." Crawler"; } } else { $bname='Netscape Navigator'; $version=substr($kennung,index($kennung,"/")+1,index($kennung,"(")-index($kennung,"/")-1); } } else { if (($kennung =~ /MSIE/) || ($kennung =~ /Microsoft Internet Explorer/)) { $bname='Microsoft Internet Explorer'; $version=substr($kennung,index($kennung,"MSIE")+5,length($kennung)); $version=substr($version,0,index($version,";")); } elsif ($kennung =~ /Lynx/) { $bname="Lynx"; $version=substr($kennung,index($kennung,"Lynx")+5,length($kennung)); $version=substr($version,0,index($version," ")); } elsif ($kennung =~ /OmniWeb/) { $bname="OmniWeb"; $version=substr($kennung,index($kennung,"OmniWeb")+8,length($kennung)); $version=substr($version,0,index($version," ")); } elsif ($kennung =~ /Microsoft URL Control/) { ($bname,$version)=split(/ - /,$kennung); } elsif ($kennung =~ /AOL/) { $bname='AOL'; } elsif ($kennung =~ /Mosaic/) { if ($kennung =~ /NCSA/) { if ($kennung =~ /Secure/) {$bname='Secure NCSA Mosaic';} else {$bname=' NCSA Mosaic';} } elsif (($kennung =~ /Quarterdeck/) || ($kennung =~ /QMosaic/)) { $bname='Quarterdeck Mosaic';} else {$bname='Mosaic';} } elsif ($kennung =~ /HotJava/) {$bname='HotJava';} elsif ($kennung =~ /Opera/) {$bname='Opera';} elsif ($kennung =~ /Notes/) { $bname='Notes Web Navigator';} elsif ($kennung =~ /Arena/) { $bname='Arena';} elsif ($kennung =~ /MacWeb/) { $bname='MacWeb';} elsif (($kennung =~ /WebExplorer/) || ($kennung =~ /IBM/)) { $bname='WebExplorer';} elsif ($kennung =~ /IBrowse/) { $bname='IBrowse';} elsif ($kennung =~ /Notes/) { $bname='Notes Web Navigator';} elsif ($kennung =~ /GNNworks/) { $bname='GNNworks';} elsif ($kennung =~ /WebWhacker/) { $bname='WebWhacker';} elsif ($kennung =~ /NetAttache/) { $bname='NetAttache';} elsif ($kennung =~ /IWENG/) { $bname='AOL';} else { if ($http_user_agent =~ /via/) { $bname=substr($kennung,0,index($kennung,'via')); } else { if ($kennung) { $bname=$kennung; } else { $bname='Undetectable Browser';} } } if ($kennung =~ /Version/) { $version=substr($kennung,index($kennung,"Version")+8,index($kennung,"/")-(index($kennung,"Version")+1)); } } if (length($bname) <1) { $bname="Unknown Browser"; $version="-";} $result="$bname,$version"; return $result; } ############################################################################## # EOF ##############################################################################
(Achtung: Erfordert ggf. Nachkonfiguration des Webservers, um Parameter bei CGI-Skripts innerhalb SSI-Seiten zu erlauben!)
Aufruf
Der Aufruf des Programmes erfolgt durch die Angabe seiner Location auf dem Verzeichnisshttp://cgi.xwolf.de/cgilocal/browserjump.cgi (bzw. die Location, in der die Files ablegt sind.)
und der Angabe der Browser mit dessen Browserspezifischen Seiten
Der obige Code fü das dritte Beispiel (Aufruf in einem SSI-Dokument!) sieht z.B. so aus:
<!--#include virtual="/cgilocal/browserjump.cgi?Opera=grins.html&
Netscape=blume.html&Microsoft=tonne.html&
else=devil.html" -->
Um nur den Browsernamen und die Version auszugeben reicht der Aufruf des Skriptes:
http://cgi.xwolf.de/cgilocal/browserjump.cgi
Um einen Link zu machen, der automatisch Redirected wird folgende Syntax verwendet:
http://.../browserjump.cgi?redirect=1&Netscape=URLNetscape
Dabei können folgende Browser direkt angegeben werden:
- Netscape
- Microsoft
- AOL
- Opera
- Lynx
- else
Installation
Die Installation besteht lediglich in der Änderung von 2 Zeilen:
| Zeile 1 | #!/usr/bin/perl Geben Sie hier Ihren eigenen Pfad zu Perl an. |
| Zeile 25 | $NEED_ELSE=0; Geben Sie hier an, ob eine Angabe des else erzwungen werden soll. |
Bemerkung
Microsoft macht(e) eine ähnliche Beschränkung auf deren Seiten, so
daß auf einigen Seiten nur der MS-Browser zugreifen kann. Natuürlich steht
jeden frei sowas zu machen, aber man sollte sich dann nicht wundern, wenn einige
Leute es nicht so toll finden...
Man sollte das Skript nutzen um Surfern ein echtes Feature zu bieten, indem
man diese z.B. vom Anklicken von Links wie "Tippen Sie hier, wenn Sie Netscape benutzen"
verschont.
Grundsätzlich muß man aber auch sagen, daß dieses Skript eigentlich nur ein nettes Gimmick ermöglicht. Für Webseiten mit viel Inhalt, sollte man jedoch nicht ein solches Skript benutzen um eine Browserweiche zu machen, sondern lieber die Webseiten so erstellen, daß sie mit jedem Browser lesbar sind. Oder noch besser: Man hält sich an die Standards des W3C für HTML und CSS.
Info
$Id: browserjump.shtml,v 1.5 2003/05/23 12:22:16 xwolf Exp $, Linkcount: [an error occurred while processing this directive]
© 1996 - 2003 by xwolf -
xwolf ist eingetragene Marke beim Deutschen Patent- und Markenamt (Nr. 301 04 380)


