5 votes

Obtenir le navigateur et la version en utilisant Coldfusion

Y a-t-il quelque chose d'intégré à Coldfusion qui me permettrait de connaître le navigateur et le numéro de version qui navigue sur mon site ? Existe-t-il des bibliothèques qui me permettraient de faire cela ?

Mon google-fu n'a pas montré beaucoup de choses autres que de simples déclarations if détectant IE.

J'ai fait un dump de la variable cgi.http_user_agent dans Chrome :

Mozilla/5.0 (Windows NT 5.1) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.77 Safari/534.24

Il y a trois navigateurs différents mentionnés là-dedans ! Faire une déclaration if en cherchant l'un ou l'autre renverrait vrai. Il doit y avoir une approche plus formelle ?

0voto

Steve Grundy Points 1

La fonction définie par l'utilisateur ci-dessus a bien fonctionné, mais j'ai dû ajouter le code suivant pour que le numéro de version fonctionne correctement avec IE (MSIE) :

// Handle MSIE Version issue
IF (Left(Browser,4) EQ "MSIE") {
        tmpBrowser = Browser;
    IF (listLen("#tmpBrowser#", " ") EQ 2) {
        Browser = listGetAt("#tmpBrowser#", 1, " ");
        BrowserVer = listGetAt("#tmpBrowser#", 2, " ");
    }
}

Avec un user_agent comme celui-ci :

Mozilla/4.0 (compatible ; MSIE 8.0 ; Windows NT 6.1 ; Trident/4.0 ; SLCC2 ; .NET CLR 2.0.50727 ; .NET CLR 3.5.30729 ; .NET CLR 3.0.30729 ; Media Center PC 6.0 ; .NET4.0C)

Il retournait une version vide et un nom de navigateur "MSIE 8.0".

0voto

SeriesBlue Points 11

Voici une construction récente du nom et de la version du navigateur Testé sur Opra / IE 8 / IE 9 / IE 10 / IE 11 / Edge / Chrome / Firefox

<cffunction name="GetBrowser" access="public">
    <cfset var l = {}>
    <cfset l.UserInfo = cgi.HTTP_USER_AGENT>
    <cfset l.Browser = {}>

    <cfif FindNoCase ( "Opera", l.UserInfo ) >
        <cfset l.Browser.type = "Opera">
        <cfset l.Browser.Name = "Opera">
    <cfelseif FindNoCase ( "OPR", l.UserInfo )>
        <cfset l.Browser.type = "OPR">
        <cfset l.Browser.Name = "Opera">
    <cfelseif FindNoCase ( "Edge", l.UserInfo )>
        <cfset l.Browser.type = "Edge">
        <cfset l.Browser.Name = "Edge">
    <cfelseif FindNoCase ( "Chrome", l.UserInfo )>
        <cfset l.Browser.type = "Chrome">
        <cfset l.Browser.Name = "Chrome">
    <cfelseif FindNoCase ( "Safari", l.UserInfo )>
        <cfset l.Browser.type = "Safari">
        <cfset l.Browser.Name = "Safari">
    <cfelseif FindNoCase ( "FireFox", l.UserInfo )>
        <cfset l.Browser.type = "FireFox">
        <cfset l.Browser.Name = "FireFox">
    <cfelseif FindNoCase ( "MSIE", l.UserInfo ) >
        <cfset l.Browser.type = "MSIE">
        <cfset l.Browser.Name = "Internet Explorer">
    <cfelseif FindNoCase ( "Trident", l.UserInfo ) >
        <cfset l.Browser.type = "Trident">
        <cfset l.Browser.Name = "Internet Explorer">
    <cfelse>
        <cfset l.Browser.type = "Unknown">
        <cfset l.Browser.Name = "Unknown">
        <cfset l.Browser.Version = "Unknown">
    </cfif>

    <cfif FindNoCase ( "rv:" , l.UserInfo ) NEQ 0>
        <cfset l.Params = REFindNoCase ( "rv:[0-9.]+", l.UserInfo, Find ( "rv:", l.UserInfo ), true )>
        <cfset l.FirstOccurrence = l.Params.POS[1]>
        <cfset l.ParamLength = l.Params.LEN[1]>
        <cfset l.BrowserNameLength = Len ( "rv:" )>
        <cfset l.Browser.Version = Mid ( l.UserInfo, ( l.FirstOccurrence + l.BrowserNameLength ), ( l.ParamLength - l.BrowserNameLength ) )>
     <cfelse>
        <cfset l.Params = REFindNoCase ( #l.Browser.type# & "/?[ 0-9.]+", l.UserInfo, Find ( "#l.Browser.type#", l.UserInfo ), true )>
        <cfset l.FirstOccurrence = l.Params.POS[1]>
        <cfset l.ParamLength = l.Params.LEN[1]>
        <cfset l.BrowserNameLength = Len ( l.Browser.type ) + 1>
        <cfset l.Browser.Version = Mid ( l.UserInfo, ( l.FirstOccurrence + l.BrowserNameLength ), ( l.ParamLength - l.BrowserNameLength ) )>
     </cfif>

     <cfreturn l.Browser>
</cffunction>

<cfdump var="#GetBrowser()#">

0voto

Nathan Points 21

Voici la version refactorisée (à partir de la version précédente) de cfscript pour le nom du navigateur seulement.

function GetBrowserName() {
    var rs = "Unknown";
    var uag = cgi.HTTP_USER_AGENT;
    if (FindNoCase("Opera",uag))
         rs = "Opera";
    else if (FindNoCase("OPR",uag))
         rs = "Opera";
    else if (FindNoCase("Edge",uag))
         rs = "Edge";
    else if (FindNoCase("Chrome",uag))
         rs = "Chrome";
    else if (FindNoCase("Safari",uag))
         rs = "Safari";
    else if (FindNoCase("Firefox",uag))
         rs = "Firefox";
    else if (FindNoCase("MSIE",uag))
         rs = "IExplore";
    else if (FindNoCase("Trident",uag))
         rs = "IExplore";
    else
         rs = "Unknown";
    return rs;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X