Newsgroup: it.comp.lang.javascript
Titolo: [serio] dimmi il tuo navigator.userAgent e ti dirò chi sei :)

ho un'ideuzza per un parsing il più rigoroso possibile di 
navigator.userAgent ... ma mi serve la vostra collaborazione. Il mio 
Internet Explorer 5.01 (on Windows 2000) si qualifica come:
4.0 (compatible; MSIE 5.01; Windows NT 5.0)
e il vostro? avanti, mi servono più stringhe possibili... anche browser 
assurdi o improbabili... devo sapere se quello che ho in mente è 
fattibile
-- 
-----BEGIN GEEK CODE BLOCK-----
Version 3.1 (with proprietary extensions)
Comments: waiting for version 4.0 ;)
GE/M/S/O d- s:--- !a C++++()>$ UL P+>+++ L+>++ e w++>$ N++ o-- K- W++ O? 
M? V? PS++ PE- Y+>+++ PGP++ t+ 5? X++(+) R tv--  b++>++++ DI++ D++ G-- e 
h! !r xy**
------END GEEK CODE BLOCK------

 fattibile
Mozilla/5.0(Windows; U; Win98; en-US; M18) Gecko/20001108 Netscape6/6.0
Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)
andreotta fabiano
 WebMªster ATI POWER s.n.c.
 
andr...@atipower.it
 
http://www.atipower.it
    -new-
 
http://www.aticommerce.com
 
http://www.afdsoftware.freeweb.org
 
http://www.jsdir.com

Mozilla 4.73 (Windows 98, U) Opera 4.02 [en]
questo è Opera 4.02 allora?
la U per cosa sta, che tu sappia?


Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)
IE 5.5, quasi sicuramente...


> la U per cosa sta, che tu sappia?
Non ne ho la più pallida idea... :-)


 
Faccio di meglio:
Per Netscape 4.7 ho:
Nome del Browser (appName): Netscape
Versione del Browser (appVersion): 4.7 [en] (Win95; I)
Lingua del Browser (language): en
Piattaforma (Sys. Op.) del Browser (platform): Win32
Client info (userAgent): Mozilla/4.7 [en] (Win95
Per Explorer 4 ho:
Versione del Browser (appVersion): 4.0 (compatible; MSIE 4.01; Windows 95; 
QXW0600E) 
Lingua del Browser (language): undefined 
Piattaforma (Sys. Op.) del Browser (platform): Win32 
Client info (userAgent): Mozilla/4.0 (compatible; MSIE 4.01; Windows 95; 
QXW0600E) 
 
Per Netscape 3 ho:
Nome del Browser (appName): Netscape
Versione del Browser (appVersion): 3.04 (Win95; I)
Lingua del Browser (language): undefined
Piattaforma (Sys. Op.) del Browser (platform): undefined
Client info (userAgent): Mozilla/3.04 (Win95; I)
! ! ! N.B. ! ! !
Se puň servirti sappi che ho effettivamente Win95/Osr2, ma taroccato con le 
Winsock 2 per poter eseguire il PersonalWebServer di Windows98
-- 
Ciao, Riccardo
------------------------------------------------------------------------
WebMaster: ----> 
http://www.jsdir.com
 <---- (aka 
http://www.jspoint.it
)
------------------------------------------------------------------------
               Nessun traguardo č abbastanza lontano.
------------------------------------------------------------------------

Opera 5.02 che si identifica come Opera:
appName Opera
appVersion 5.02 (Windows 98; U)
language en
platform Win32
userAgent Opera/5.02 (Windows 98; U) [en]
Se si identifica come Mozilla 5.0:
appName Netscape
appVersion 5.0 (Windows 98; U)
language en
platform Win32
userAgent Mozilla/5.0 (Windows 98; U) Opera/5.02 [en]
Se si identifica come Mozilla 4.76:
appName Netscape
appVersion 4.76 (Windows 98; U)
language en
platform Win32
userAgent Mozilla/4.76 (Windows 98; U) Opera/5.02 [en]
Se si identifica come Mozilla 3.0
appName Netscape
appVersion 3.0 (Windows 98; U)
language en
platform Win32
userAgent Mozilla/3.0 (Windows 98; U) Opera/5.02 [en]
Se si identifica come MSIE 5.0:
appName Microsoft Internet Explorer
appVersion 4.0 (compatible;  MSIE 5.0; Windows 98)
language en
platform Win32
userAgent Mozilla/4.0 (compatible; MSIE 5.0; Windows 98) Opera/5.02
[en]
Ciao, Stefania
-- 
Stefania B.     
ste...@libero.it
http://web.tiscalinet.it/angolostefania
 (aggiornato 30 dicembre 2000)

Mozilla 4.73 (Windows 98, U) Opera 4.02 [en]
'nnaggia a te :)
riportala correttamente (Mozilla/4.73 (Windows 98; U) Opera/4.02 [en]), 
mettere mano a delle regex non è bello :)


Ciao, Stefania
hehehehe
semplicemente spaventoso O___O
('sto Opera č meglio di Fatomas ^^;;;;;)


Lynx/2.8.2rel.1 libwww-FM/2.14
e per finire in bellezza, lynx 2.8qualchecosa... compilato con la libwww 
2.14 ...
hehehe, maledetti... mi fate sentire come uno di quegli indovini a cui 
il re di Babilonia chiese di interpretare il sogno che aveva avuto... 
senza dire che sogno aveva fatto, perchč sennň che razza di indovini 
erano?
almeno io non verrň condannato a morte se fallisco ^^;;;;


Netscape® Communicator 4.76 Eng:
  Mozilla/4.76 [en] (Win98; U)
IExplorer 5.50.4522.1800 ita versione aggiornamento SP1
  Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)
entrambi su Win98
Ciao, Daniele

Dimenticavo: anche "Anarchie/3.7"
ma non è un client FTP?
va bene, io ce lo metto lo stesso... chissà che non si riesca ad 
estendere la cosa anche dal lato server


: 
*ecco una prima versione*
riconosce correttamente Opera in tutte i suoi travestimenti, Explorer
per (quasi - Riccardo, c'è qualcosa di strano nel tuo IE :/ ) tutte
le piattaforme, Netscape 4.x e 3.x per Windows, e Anarchie per Mac (Marco,
ho controllato meglio: è anche un browser :) mille scuse :)
testato su Explorer 5.01 e Netscape 4.51
avvertenze:
 - su Netscape compila ad una velocità indecentemente bassa
 - non ottimizzato
 - non sempre legge la lingua del browser (sorry)
 - formatStr() è una versione temporanea. Sto lavorando a funzioni
   compatibili con le procedure di formattazione di C/C++ e Pascal
uso:
var oClient = new Client(sId)
oClient: variabile in cui verrà salvato l'oggetto Client
sId: stringa dell'userAgent
proprietà dell'oggetto Client:
 - agent: stringa dell'agente ("Mozilla" per IE e NS, "Opera" per Opera,
   ecc)
 - agentVer: versione dell'agente in forma decimale (float)
 - agentVerMaj: numero versione agente (intero)
 - agentVerMin: numero revisione agente (intero)
 - app: stringa applicazione (abbreviazione di due lettere)
 - appVer: versione applicazione in forma decimale (float)
 - appVerMaj: numero versione applicazione (intero)
 - appVerMin: numero revisione applicazione (intero)
 - os: sistema operativo (in forma "selvaggia" - devo ancora lavorarci)
 - locale: due caratteri rappresentanti la lingua del browser (in molti
   casi il parametro viene forzato a "en")
<script>
//document.write(createItem("doh", ITEM_TYPE_LAYER, "doh", 100, 200, 300, 200, "absolute"));
var fieldstr= "agent;agentVer;agentVerMaj;agentVerMin;app;appVer;appVerMaj;appVerMin;os;locale";
var deffrmatstr= "unknown;0.0;0;0;unknown;0.0;0;0;unknown;en";
var formatstr= "str;float;int;int;str;float;int;int;str;str";
var knownBrowsers=new Array(
{
	pattern:	/^(Mozilla)\/(\d*)\.(\d*)\s*\(compatible;\s*MSIE\s*(\d*)\.(\d*);\s*([^;]*)\)$/gi,
	format:	"$1;$2.$3;$2;$3;IE;$4.$5;$4;$5;$6;en",
	friendly:	"Microsoft Internet Explorer $4.$5 on $6 (compatible with $1 $2.$3)"
},
{
	pattern:	/^(Mozilla)\/(\d*)\.(\d*)\s*\[(.*)\]\s*\(([^;]*);\s*([^;]*)\)$/gi,
	format:	"$1;$2.$3;$2;$3;NS;$2.$3;$2;$3;$5;$4",
	friendly:	"Netscape Navigator $2.$3 on $5"
},
{
	pattern:	/^(Mozilla)\/(\d*)\.(\d*)\s*\(([^;]*);\s*([^;]*)\)$/gi,
	format:	"$1;$2.$3;$2;$3;NS;$2.$3;$2;$3;$4;en",
	friendly:	"Netscape Navigator $2.$3 on $4"
},
{
	pattern:	/^(Opera)\/(\d*)\.(\d*)\s*\((.*); (.*)\)\s*\[(\D{2})\]$/gi,
	format:	"$1;$2.$3;$2;$3;OP;$2.$3;$2;$3;$4;$6",
	friendly:	"Opera $2.$3 on $4"
},
{
	pattern:	/^Mozilla\/(\d*)\.(\d*)\s*\((.*);\s*(.*)\)\s*(Opera)\/(\d*)\.(\d*)\s*\[(\D{2})\]$/gi,
	format:	"$5;$6.$7;$6;$7;OP;$6.$7;$6;$7;$3;$8",
	friendly:	"Opera $6.$7 on $3 impersonating Netscape $1.$2"
},
{
	pattern:	/^Mozilla\/\d*\.\d*\s*\(compatible;\s*MSIE\s*(\d*)\.(\d*);\s*([^;]*)\)\s*(Opera)\/(\d*)\.(\d*)$/gi,
	format:	"$4;$5.$6;$5;$6;OP;$5.$6;$5;$6;$3;en",
	friendly:	"Opera $5.$6 on $3 impersonating Microsoft Internet Explorer $1.$2"
},
{
	pattern:	/^(Anarchie)\/(\d*)\.(\d*)$/gi,
	format:	"$1;$2.$3;$2;$3;AN;$2.$3;$2;$3;Mac;en",
	friendly:	"Anarchie $2.$3"
},
{
	pattern:	/^([a-z]*)\/(\d*)\.(\d*).*$/gi,
	format:	"$1;$2.$3;$2;$3;??;$2.$3;$2;$3;unknown;en",
	friendly:	"$1 $2.$3"
}
)
function Client(sId){
	var rexp, tmp;
	var fields = fieldstr.split(";");
	var vals = deffrmatstr.split(";");
	var formats = formatstr.split(";");
	var desc = "unknown";
	for(var i = 0; i < knownBrowsers.length; i ++){
		rexp = knownBrowsers[i].pattern;
		if(rexp.exec(sId) != null){
			vals = sId.replace(rexp, knownBrowsers[i].format).split(";");
			desc = sId.replace(rexp, knownBrowsers[i].friendly);
			break;
		}
	}
	for(i = 0; i < fields.length; i ++){
		this[fields[i]] = formatStr(formats[i], vals[i]);;
	}
 
	this.toString = new Function("return \"" + desc + "\"");
}
function formatStr(sMode, sStr){
	switch(sMode){
		case "str": return String(sStr);
		case "int": return Number(parseInt(sStr));
		case "float": return Number(parseFloat(sStr));
		default: return sStr;
	}
}
var me = new Client(navigator.userAgent);
</script>


 quasi - Riccardo, c'è qualcosa di strano nel tuo IE :/
Già, forse ti riferisci a quella stringa: "QXW0600E"
Potrebbe dipendere dal taroccaggio delle Winsock2 ?
Bello lo script con le RegExp, lo provo subito.
-- 
Ciao, Riccardo
------------------------------------------------------------------------
WebMaster: ----> 
http://www.jsdir.com
 <---- (aka 
http://www.jspoint.it
)
------------------------------------------------------------------------
               Nessun traguardo è abbastanza lontano.
------------------------------------------------------------------------

di Mozilla ce n'č uno solo version 0.7   eheheh:-)))))))))))
Mozilla/5.0 (Windows; U; Win98; en-US; 0.7) Gecko/20010109
andreotta fabiano
 WebMŞster ATI POWER s.n.c.
