IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Fonctionnement d'un script bandeau cookie


Sujet :

JavaScript

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Infographiste
    Inscrit en
    Avril 2016
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Infographiste

    Informations forums :
    Inscription : Avril 2016
    Messages : 73
    Points : 35
    Points
    35
    Par défaut Fonctionnement d'un script bandeau cookie
    Bonjour,

    Je suis novice en javascript, j'ai un script que je n'ai pas fait moi-même pour générer un bandeau pour informer l'utilisateur de l'utilisation de cookies et j'aimerai comprendre comment il fonctionne. Et principalement j'aimerai savoir combien de temps après validation le bandeau va réapparaitre.

    Est-ce que quelqu'un voudrait bien prendre de son temps pour m'expliquer ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    /*Cookie Box | Version 4*/ !(function () {
      var e = function (e, t, o) {
        (this.text = e),
          (this.acceptText = t),
          (this.element = null),
          this.init();
      };
      (e.prototype = {
        init: function () {
          this.create(), this.load(), this.actions();
        },
        load: function () {
          null === localStorage.getItem("cookie-box-accepted") && this._show();
        },
        actions: function () {
          var e = document.querySelector("#cookie-box-accept"),
            o = this;
          e.addEventListener(
            "click",
            function (e) {
              e.preventDefault(),
                localStorage.setItem("cookie-box-accepted", "yes"),
                o._hide();
            },
            !1
          )
     
        },
        create: function () {
          var e = document.createElement("div");
          this.element = e;
          var t =
            "<div id='cookie-box-wrap'><div id='cookie-box-text'>" +
            this.text +
            "</div>";
          (e.id = "cookie-box"),
            (t +=
              "<div id='cookie-box-btns'><button type='button' id='cookie-box-accept'>" +
              this.acceptText +
              "</button>"),
     
            (e.innerHTML = t),
            document.body.appendChild(e);
        },
        _show: function () {
          var e = this;
          (e.element.style.display = "block"),
            setTimeout(function () {
              e.element.className = "visible";
            }, 500);
        },
        _hide: function () {
          var e = this;
          (e.element.className = ""),
            setTimeout(function () {
              e.element.style.display = "none";
            }, 500);
        },
      }),
        document.addEventListener("DOMContentLoaded", function () {
          new e(
            "<h3>Vous aimez les <br>cookies?<br>🍪<br></h3>Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site Web.<a href='#cookies' rel='noopener' target='_blank'><br>En savoir plus</a><a href='#gestion'rel='noopener' target='_blank'><br>Gérer les Cookies</a><span id='open'><svg height='78' width='35'><text x='0' y='0' fill='#ffffff' transform='rotate(90 1,10)'>Cookies</text></svg></span>",
            "J'accepte"
     
          );
        });
    })();
    var sheet = (function () {
      var e = document.createElement("style");
      return (
        e.appendChild(
          document.createTextNode(
            "#cookie-box{position:fixed;bottom:0px;left:0px;width:100%;max-width:290px;min-height:3em;background:#f1f1f1;color:#555;z-index:10000000000;display:none;transition:all .5s ease-in;transform: translate(-350px, 0px);}#cookie-box.visible{transform:translate(0px, 0px)}#cookie-box{background-color:rgba(23, 23, 23, 0.8);margin-left:-293px}#cookie-box:hover{margin-left:0px}#cookie-box-wrap{margin:0 auto;max-width:285px;text-align:center}#cookie-box-text{color:#ffffff;padding:17px 3px 7px;font-size:15px;line-height:25px;}#cookie-box-text a{color:#ffa600;text-decoration:underline;}#cookie-box-btns{margin:15px auto}#open{float:right;margin-top:-25px;margin-right:-40px;background-color:rgba(23, 23, 23, 0.6);font-size:19px;border-left:none;border-top-right-radius:4px;border-bottom-right-radius:4px}.mytooltip{position:relative}.mytooltip .mytooltext{visibility:hidden;transition:all .5s ease-in;max-width:280px;background-color:grey;font-size:15px;line-height:19px;color:#fff;text-align:center;text-transform:none;border-radius:1px;padding:25px 0;position:fixed;z-index:1;bottom:57px;left:5px}.mytooltip:hover .mytooltext{visibility:visible}"
          )
        ),
        document.head.appendChild(e),
        e.sheet
      );
    })();
    function eraseCookieFromAllPaths(e) {
      var o = location.pathname.split("/"),
        t = " path=";
      document.cookie = e + "=; expires=Thu, 01-Jan-1970 00:00:01 GMT;";
      for (var a = 0; a < o.length; a++)
        (t += ("/" != t.substr(-1) ? "/" : "") + o[a]),
          (document.cookie =
            e +
            "=; expires=Thu, 01-Jan-1970 00:00:01 GMT;" +
            t +
            ";") /*,alert("The following cookies will be deleted: "+document.cookie)*/,
          location.reload(true);
    }

  2. #2
    Expert confirmé
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 453
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 453
    Points : 4 602
    Points
    4 602
    Par défaut
    si tu comprends un peu l'anglais, tu devrai pouvoir comprendre ce qui se cache dans ce code..
    une function d'initialisation est apellee, elle appelle elle-meme 3 function (create, load & action)
    create "fabrique" la box avec le message, load l'affiche, et action ajoute un evenement pour l'acceptation

    je vois qu'il y a une function qui supprime des cookies, mais je ne vois pas de function pour creer les cookies
    a savoir que la duree legale d'un cookie est de 13mois

    mais la, il ne se base pas sur les cookies, mais sur des variables du localstorage (vu qu'on peu legalement stocker ce qu'on veut sans le consentement de l'utilisateur)
    => le localstorage n'a pas de duree de vie max legal...donc l'utilisateur accept, il ne verra plus la box
    La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

    Venez discuter sur le Chat de Développez !

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Infographiste
    Inscrit en
    Avril 2016
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Infographiste

    Informations forums :
    Inscription : Avril 2016
    Messages : 73
    Points : 35
    Points
    35
    Par défaut
    Merci pour ta réponse.

    Donc en acceptant les cookies, cela ne désactive pas les cookies ? ça ne me parait pas clair vu que tu me dis "je vois qu'il y a une function qui supprime des cookies, mais je ne vois pas de function pour creer les cookies"

    Je souhaite simplement qu'on puisse accepter le consentement, et que le message réapparaisse dans un délai compris entre 24h et 13 mois car là je ne comprends pas bien si je suis dans les clous ou pas.
    C'est compliqué de modifier cette base de code ou vaut t'il mieux que je parte de 0 en suivant un tutoriel ?

  4. #4
    Expert confirmé
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 453
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 453
    Points : 4 602
    Points
    4 602
    Par défaut
    je dis juste que dans le code fournis, on y trouve une function qui supprime les cookies (mais elle n'es jamais appellee)

    de plus, le code fournis n'utilise pas les cookies pour stocker le consentement de l'utilisateur (mais utilise le localstorage)

    enfin, un bandeau de cookie qui reviens toutes les 24h, ca va etre tres vite imbuvable pour les utilisateur...

    pour ce qui est d'etre dans les clous :
    il ne suffit pas d'afficher un bandeau "nous utilisons les cookies"... il faut aussi s'assurer qu'aucun script (interne ou externe) de pose de cookie avant l'acceptation de l'utilisateur, quant a l'utilisation du localstorage, je ne peux pas te dire si c'est legal ou pas (en tout cas la CNIL ne se base pas -encore- dessus)
    La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

    Venez discuter sur le Chat de Développez !

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Infographiste
    Inscrit en
    Avril 2016
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Infographiste

    Informations forums :
    Inscription : Avril 2016
    Messages : 73
    Points : 35
    Points
    35
    Par défaut
    Merci, tout est clair maintenant. Je n'étais pas au courant de cette information : "il faut aussi s'assurer qu'aucun script (interne ou externe) de pose de cookie avant l'acceptation de l'utilisateur"

    Avec un script qui respecte toutes ces conditions j'ai plutôt intérêt à ce que le message soit visible et que l'utilisateur accepte les conditions alors.

    Le soucis c'est que j'ai un effet sympathique qui fait que mon site s'ouvre doucement sur un laps de temps de 2-3scd

    Est-ce que tu connaitrais un script non payant qui respecte toutes ces conditions et proposerait de s'afficher en plein milieu de l'écran après un laps de temps défini ?

    Je tente le coup :p car je suis incapable de coder ça moi même. Peut-être que des bibliothèques existent on ne sait jamais..

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Infographiste
    Inscrit en
    Avril 2016
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Infographiste

    Informations forums :
    Inscription : Avril 2016
    Messages : 73
    Points : 35
    Points
    35
    Par défaut
    J'ai avancé depuis quelques temps mais je rencontre toujours un problème..

    J'ai en théorie un bandeau qui respecte la loi, mais en faisant un test de conformité en ligne on me dit que mon site ne respecte pas ce point : "Consentement préalable pour les cookies autres que ceux strictement nécessaires" alors qu'il me semble que je suis dans les clous sur ce point..

    quelqu'un pourrait m'expliquer pourquoi ça ne va toujours pas avec mon nouveau code svp ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    (function($) {
     
     
        $.fn.ihavecookies = function(options, event) {
     
            var $element = $(this);
     
     
            // Définir les valeurs par défaut
            var settings = $.extend({
                cookieTypes: [
                    {
                        type: 'Préférences',
                        value: 'preferences',
                        description: 'Cookies liés aux préférences de votre site, par ex. mémoriser votre nom d utilisateur, les couleurs du site, etc.'
                    },
                    {
                        type: 'Analytics',
                        value: 'analytics',
                        description: 'Cookies liés aux visites du site, aux types de navigateurs, etc.'
                    },
                    {
                        type: 'Marketing',
                        value: 'marketing',
                        description: 'Cookies liés au marketing, par ex. newsletters, réseaux sociaux, etc.'
                    }
                ],
                title: 'Vous aimez les cookies ?',
                message: 'Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site Web...',
                link: '#cookies',
                delay: 2000,
                expires: 30,
                moreInfoLabel: 'En savoir plus',
                acceptBtnLabel: 'Accepter',
                advancedBtnLabel: 'Personnaliser',
                cookieTypesTitle: 'SÉLECTIONNEZ LES COOKIES QUE VOUS VOULEZ ACCEPTER',
                fixedCookieTypeLabel:'Essentiel',
                fixedCookieTypeDesc: 'Ceux-ci sont essentiels au bon fonctionnement du site Web.',
                onAccept: function(){},
                uncheckBoxes: false
            }, options);
     
            var myCookie = getCookie('cookieControl');
            var myCookiePrefs = getCookie('cookieControlPrefs');
            if (!myCookie || !myCookiePrefs || event == 'reinit') {
                // Supprime toutes les instances du message cookie pour qu'il ne soit pas dupliqué
                $('#gdpr-cookie-message').remove();
     
                // Cochez la case du type de cookie 'nécessaire' qui ne peut pas être décochée
                var cookieTypes = '<li><input type="checkbox" name="gdpr[]" value="necessary" checked="checked" disabled="disabled"> <label title="' + settings.fixedCookieTypeDesc + '">' + settings.fixedCookieTypeLabel + '</label></li>';
     
                // Générer la liste des cases à cocher des types de cookies
                preferences = JSON.parse(myCookiePrefs);
                $.each(settings.cookieTypes, function(index, field) {
                    if (field.type !== '' && field.value !== '') {
                        var cookieTypeDescription = '';
                        if (field.description !== false) {
                            cookieTypeDescription = ' title="' + field.description + '"';
                        }
                        cookieTypes += '<li><input type="checkbox" id="gdpr-cookietype-' + field.value + '" name="gdpr[]" value="' + field.value + '" data-auto="on"> <label for="gdpr-cookietype-' + field.value + '"' + cookieTypeDescription + '>' + field.type + '</label></li>';
                    }
                });
     
               // Afficher le message de cookie sur la page
                var cookieMessage = '<div id="gdpr-cookie-message"><h4>' + settings.title + '</h4><p>' + settings.message + ' <a href="' + settings.link + '">' + settings.moreInfoLabel + '</a><div id="gdpr-cookie-types" style="display:none;"><h5>' + settings.cookieTypesTitle + '</h5><ul>' + cookieTypes + '</ul></div><p><button class=button2 id="gdpr-cookie-accept" type="button">' + settings.acceptBtnLabel + '</button><button class=button2 id="gdpr-cookie-advanced" type="button">' + settings.advancedBtnLabel + '</button></p></div>';
                setTimeout(function(){
                    $($element).append(cookieMessage);
                    $('#gdpr-cookie-message').hide().fadeIn('slow', function(){
     
                        // En cas de réinitialisation, ouvrez la section avancée du message
                        // et revérifiez toutes les options précédemment sélectionnées.
                        if (event == 'reinit') {
                            $('#gdpr-cookie-advanced').trigger('click');
                            $.each(preferences, function(index, field) {
                                $('input#gdpr-cookietype-' + field).prop('checked', true);
                            });
                        }
                    });
                }, settings.delay);
     
               // Lorsque vous cliquez sur le bouton d'acceptation, déposez le cookie
                $('body').on('click','#gdpr-cookie-accept', function(){
                    // Set cookie
                    dropCookie(true, settings.expires);
     
                    // Si 'data-auto' est défini sur ON, cochez toutes les cases car
                    // l'utilisateur n'a pas cliqué sur le bouton de personnalisation des cookies
                    $('input[name="gdpr[]"][data-auto="on"]').prop('checked', true);
     
     
                    // Enregistrer les préférences de cookies des utilisateurs (dans un cookie!)
                    var prefs = [];
                    $.each($('input[name="gdpr[]"]').serializeArray(), function(i, field){
                        prefs.push(field.value);
                    });
                    setCookie('cookieControlPrefs', encodeURIComponent(JSON.stringify(prefs)), 365);
     
                    // Exécuter la fonction de rappel
                    settings.onAccept.call(this);
                });
     
                // Activer / désactiver les options de cookies avancées
                $('body').on('click', '#gdpr-cookie-advanced', function(){
                    // Décochez toutes les cases à l'exception de la désactivée «nécessaire»
                    // one et définissez 'data-auto' sur OFF pour tous. L'utilisateur peut maintenant
                    // sélectionnez les cookies qu'ils souhaitent accepter.
                    $('input[name="gdpr[]"]:not(:disabled)').attr('data-auto', 'off').prop('checked', false);
                    $('#gdpr-cookie-types').slideDown('fast', function(){
                        $('#gdpr-cookie-advanced').prop('disabled', true);
                    });
                });
     
            } else {
                var cookieVal = true;
                if (myCookie == 'false') {
                    cookieVal = false;
                }
                dropCookie(cookieVal, settings.expires);
            }
     
            // Décochez toutes les cases au chargement de la page
            if (settings.uncheckBoxes === true) {
                $('input[type="checkbox"].ihavecookies').prop('checked', false);
            }
     
        };
     
        // Méthode pour obtenir la valeur du cookie
        $.fn.ihavecookies.cookie = function() {
            var preferences = getCookie('cookieControlPrefs');
            return JSON.parse(preferences);
        };
     
     
        // Méthode pour vérifier si la préférence de cookie de l'utilisateur existe
        $.fn.ihavecookies.preference = function(cookieTypeValue) {
            var control = getCookie('cookieControl');
            var preferences = getCookie('cookieControlPrefs');
            preferences = JSON.parse(preferences);
            if (control === false) {
                return false;
            }
            if (preferences === false || preferences.indexOf(cookieTypeValue) === -1) {
                return false;
            }
            return true;
        };
     
       // Fonction pour déposer le cookie avec une valeur booléenne de true.
        var dropCookie = function(value, expiryDays) {
            setCookie('cookieControl', value, expiryDays);
            $('#gdpr-cookie-message').fadeOut('fast', function() {
                $(this).remove();
            });
        };
     
        // Définit le cookie avec «nom» et la valeur «valeur» pour «jours_expiration».
        var setCookie = function(name, value, expiry_days) {
            var d = new Date();
            d.setTime(d.getTime() + (expiry_days*24*60*60*1000));
            var expires = "expires=" + d.toUTCString();
            document.cookie = name + "=" + value + ";" + expires + ";path=/";
            return getCookie(name);
        };
     
       // Obtient le cookie appelé «nom».
        var getCookie = function(name) {
            var cookie_name = name + "=";
            var decodedCookie = decodeURIComponent(document.cookie);
            var ca = decodedCookie.split(';');
            for (var i = 0; i < ca.length; i++) {
                var c = ca[i];
                while (c.charAt(0) == ' ') {
                    c = c.substring(1);
                }
                if (c.indexOf(cookie_name) === 0) {
                    return c.substring(cookie_name.length, c.length);
                }
            }
            return false;
        };
     
    }(jQuery));
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
        <!-- Bandeau cookies -->
        <script type="text/javascript" src="js/cookies.js"></script>
        <script type="text/javascript">
        var options = {
            title: '&#x1F36A; Vous aimez les cookies ?',
            message: 'Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site Web...',
            delay: 4000,
            expires: 1,
            link: '#cookies',
            onAccept: function(){
                var myPreferences = $.fn.ihavecookies.cookie();
                console.log('Yay! Les préférences suivantes ont été enregistrées ...');
                console.log(myPreferences);
            },
            uncheckBoxes: true,
            acceptBtnLabel: 'Accepter',
            moreInfoLabel: 'En savoir plus',
            cookieTypesTitle: 'SÉLECTIONNEZ LES COOKIES QUE VOUS SOUHAITEZ ACCEPTER',
            fixedCookieTypeLabel: 'Essentiel',
            fixedCookieTypeDesc: 'Cookies essentiels au bon fonctionnement du site Web.'
        }
     
        $(document).ready(function() {
            $('body').ihavecookies(options);
     
            if ($.fn.ihavecookies.preference('marketing') === true) {
                console.log('Cela devrait fonctionner car le marketing est accepté.');
            }
     
            $('#ihavecookiesBtn').on('click', function(){
                $('body').ihavecookies(options, 'reinit');
            });
        });
     
        </script>

Discussions similaires

  1. [Dojo] un grille avec un JsonRestStore ne fonctionne qu'en script
    Par ernestrenan dans le forum Bibliothèques & Frameworks
    Réponses: 6
    Dernier message: 30/11/2011, 10h55
  2. Réponses: 10
    Dernier message: 28/05/2011, 23h04
  3. Réponses: 3
    Dernier message: 03/01/2009, 18h59
  4. Réponses: 4
    Dernier message: 27/10/2008, 07h27
  5. [Débutante] Problème de fonctionnement d'un script
    Par laroche1 dans le forum MATLAB
    Réponses: 16
    Dernier message: 24/10/2007, 10h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo