version universelle de addEventListener () ?

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par ortolojf, 12 Décembre 2020.

  1. ortolojf
    ortolojf WRInaute accro
    Inscrit:
    14 Août 2002
    Messages:
    3 258
    J'aime reçus:
    23
    Bonjour

    J'ai concocté une fonction émulant addEventListener().

    Merci de me dire si çà marche malgré mon indignité et mon peu de connaissance en Javascript.

    Code:
    
    function EventListener(obj,evt,func){
        var link = null;
        if ('attachEvent' in window){//IE
            obj.attachEvent('on'+evt,func);
            link = window.evt.srcElement;
        } else if ('addEventListener' in window){
            obj.addEventListener(evt,func, false);
            link = this;
        }
        return link;
    }
    
    
     
  2. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 119
    J'aime reçus:
    317
    Donc au lieu d'utiliser le addEventListener natif, tu vas passer par ce helper pour supporter IE < 9... o_O
    Pour supporter les autres browsers on passe par un polyfill.
     
    #2 spout, 12 Décembre 2020
    Dernière édition: 12 Décembre 2020
  3. ortolojf
    ortolojf WRInaute accro
    Inscrit:
    14 Août 2002
    Messages:
    3 258
    J'aime reçus:
    23
    Bonjour spout ;)

    Une autre version :

    C'est pour supporter IE>=7 et autres navigateurs.

    Cà fonctionnerait ou non ?

    Merci de ton aide.


    Code:
    
    function EventListener(obj,evt,func){
        if ('attachEvent' in window){//IE
            obj.attachEvent('on'+evt,func);
            return window.evt.srcElement;
        } else if ('addEventListener' in window){
            obj.addEventListener(evt,func, false);
            return obj;
        }
        return null;
    }
    
    
     
  4. ortolojf
    ortolojf WRInaute accro
    Inscrit:
    14 Août 2002
    Messages:
    3 258
    J'aime reçus:
    23
    Excusez-moi Monsieur spout

    Supposons un DOM produit avec innerHTML, et comportant un <div id="ident">

    Dans quelles conditions, il serait possible d'accéder à l'id de cette manière :

    document.getElementById('id')

    sans que celà ne rende undefined ?

    Merci beaucoup.
     
  5. ortolojf
    ortolojf WRInaute accro
    Inscrit:
    14 Août 2002
    Messages:
    3 258
    J'aime reçus:
    23
    Bonjour

    Voilà le html sous innerHTML ( très simplifié il n'y a que la ligne du début. )

    Il semblerait que la fonction OnMouseOver(i) ne se déclenche pas.

    Comment faire ?

    Merci.


    HTML:
    
    <br>
    <div id="interface_services">
            <div class="centered_service_left">
                    <div id="staring_form">
                            <div>
                                    <span>Page d'Accueil</span>
                                    <p>
                                    <span class="sous_titre">6 Votes&nbsp;&nbsp;&nbsp;</span>
                                    <span>3.2</span> / <span>7</span>
                                    <br>
                                    <ul id="rating">
                                            <li onmouseover='OnMouseOver(1)'; onclick='OnMouseOver(1);'>
                                                    <form action="http://localhost/" method="post">
                                                            <input type="hidden" name="note" value="0">
                                                            <button type="submit" value="&#x2605;" aria-label="1&nbsp;&eacute;toile">
                                                                    &#x2605;</button>
                                                    </form>
                                            </li>
                                    </ul>
                                    <ul id="current-rating">
                                            <li>1</li>
                                    </ul>
                            </div>
                    </div>
            </div>
    </div>
    
    
     
  6. colonies
    colonies WRInaute impliqué
    Inscrit:
    10 Septembre 2006
    Messages:
    577
    J'aime reçus:
    75
    Pas de support pour Netscape 4.x ? :D
     
    cthierry et spout aiment ça.
  7. ortolojf
    ortolojf WRInaute accro
    Inscrit:
    14 Août 2002
    Messages:
    3 258
    J'aime reçus:
    23
    Pardon

    En fait çà marche.

    Ma notation à étoiles façon Javascript sera sur mon site demain.

    Merci à tous à demain. :)
     
  8. ortolojf
    ortolojf WRInaute accro
    Inscrit:
    14 Août 2002
    Messages:
    3 258
    J'aime reçus:
    23
  9. ortolojf
    ortolojf WRInaute accro
    Inscrit:
    14 Août 2002
    Messages:
    3 258
    J'aime reçus:
    23
    Excusez-moi

    Pour ma notation à étoiles, j'utilise un cookie aléatoire du type UUID v2 pour éviter qu'il y ait plusieurs votes rapides du même visiteur.

    Cette approche a ses limites : Quand le cookie est effacé, la même personne peut revoter.

    Sinon, le délai est de 30 jours.

    Et vous, comment faites-vous pour identifier les visiteurs de manière anonyme ?

    Merci beaucoup de vos réponses.
     
  10. cthierry
    cthierry WRInaute passionné
    Inscrit:
    15 Janvier 2005
    Messages:
    2 273
    J'aime reçus:
    61
    Avec un fingerprint ! :)
     
  11. colonies
    colonies WRInaute impliqué
    Inscrit:
    10 Septembre 2006
    Messages:
    577
    J'aime reçus:
    75
    J'allume leur caméra, je prend une photo et j'ai un système de reconnaissance faciale pour vérifier si le visiteur est connu.

    Le fichiers sont stockés en clair dans un dossier dont on peut afficher la liste des fichiers, conformément à la loi du 5 mai 1992 sur le stockage des données biométriques, complétée par les article 3b du 25 février 2004 et la transposition du 18 novembre 2017 de la loi européenne, qui prévaut sur la loi Darmanin suite aux dispositifs 1.c, 2.e et 8.f de la LLP-FRE, confirmé par la jurisprudence de l'affaire Cofidis-Mairie de Bailly.
     
    cthierry et spout aiment ça.
  12. ortolojf
    ortolojf WRInaute accro
    Inscrit:
    14 Août 2002
    Messages:
    3 258
    J'aime reçus:
    23
    Bonjour colonies et cthierry

    Pour le fingerprinting, il y a l'enregistrement et qu'il y a dedans.

    Le localStorage vous paraît-il préférable aux cookies ?

    J'utilise Sirdata pour les cookies.

    Dois-je présenter une interface spécifique pour ma notation à étoiles ?

    Merci beaucoup de votre aide.
     
  13. ortolojf
    ortolojf WRInaute accro
    Inscrit:
    14 Août 2002
    Messages:
    3 258
    J'aime reçus:
    23
    Pardon

    Adapter mes enregistrements orientés cookies, vers deux possibilités : cookies localStorage, peut-il se faire de manière transparente ?

    Code:
    
    // En enregistrement : 
    if(localStorage()) {
      localStorage.setItem(name, value);
    } else {
      setCookie(name, value);
    }
    
      // En lecture :
    if(localStorage()) {
      value = localStorage(name);
    } else {
      value = getCookie(name);
    }
    
    
    Après, la valeur importe peu, dans la mesure ou le visiteur n'efface pas le localStorage.

    Et si c'est le cas, quelles données utiliser pour le fingerprinting ?

    Merci beaucoup.
     
  14. ortolojf
    ortolojf WRInaute accro
    Inscrit:
    14 Août 2002
    Messages:
    3 258
    J'aime reçus:
    23
    Bonjour

    Voilà, j'y ai mis un fingerprint anonyme mais le visiteur ne pourra pas voter deux fois en moins de 30 Jours.

    Merci de jeter un coup d'oeil :

    https://www.pronostics-courses.fr

    Amicalement.
     
  15. ortolojf
    ortolojf WRInaute accro
    Inscrit:
    14 Août 2002
    Messages:
    3 258
    J'aime reçus:
    23
    Pardon.

    J'y ai mis le code ci-dessous, la fonction fingerprint() rend un code hexadécimal strictement anonyme, représentatif du navigateur client.

    Il n'y a aucune utilisation de l'ip remote, ni locale.

    Ce fingerprint est seulement présent sur mon site, quand la finality 1 de Sirdata, est permise par le visiteur.

    Il sert uniquement, pour la notation à étoiles, à éviter que le même visiteur vote plusieurs fois en 30 jours, pour la même url.

    Ce fingerprint, est enregistré dans le localStorage et le cookie STAR_ID.

    Que dois-je indiquer sur l'interface Sirdata, et dans mes cgu ?

    Merci beaucoup.


    Code:
    
    <script>
    
    /************************************/
    /** Polyfill for window.DoNotTrack **/
    /************************************/
    (function(w,n,d,m,e,p){w[d]=(w[d]==1||n[d]=='yes'||n[d]==1||n[m]==1||(w[e]&&w[e][p]&&w[e][p]()))?1:0})(window,navigator,'doNotTrack','msDoNotTrack','external','msTrackingProtectionEnabled')
    /************************************/
    /** Polyfill for Math.imul library **/
    /************************************/
    Math.imul = Math.imul || function(a, b) {
    var ah = (a >>> 16) & 0xffff;
    var al = a & 0xffff;
    var bh = (b >>> 16) & 0xffff;
    var bl = b & 0xffff;
    // Le décalage par 0 rétablit le signe de la partie haute
    // le |0 final convertit la valeur non-signée en une valeur signée
    return ((al * bl) + (((ah * bl + al * bh) << 16) >>> 0)|0);
    };
    const hashCode = function(str, seed = 0) {
    let h1 = 0xdeadbeef ^ seed, h2 = 0x41c6ce57 ^ seed;
    for (let i = 0, ch; i < str.length; i++) {
    ch = str.charCodeAt(i);
    h1 = Math.imul(h1 ^ ch, 2654435761);
    h2 = Math.imul(h2 ^ ch, 1597334677);
    }
    h1 = Math.imul(h1 ^ (h1>>>16), 2246822507) ^ Math.imul(h2 ^ (h2>>>13), 3266489909);
    h2 = Math.imul(h2 ^ (h2>>>16), 2246822507) ^ Math.imul(h1 ^ (h1>>>13), 3266489909);
    // return 4294967296 * (2097151 & h2) + (h1>>>0);
    return (h2>>>0).toString(16).padStart(8,0)+(h1>>>0).toString(16).padStart(8,0);
    };
    function aleatoire(size) {
    var liste, tmp_strlen, result, nbre;
    liste = "abcdef0123456789";
    tmp_strlen = liste.length;
    result = '';
    for (var i = 0; i < size; i++) {
    nbre = Math.floor(tmp_strlen * Math.random());
    result += liste.substring(nbre, nbre + 1);
    }
    return result;
    }
    var platform = window.navigator.platform;
    var timezone = new Date().getTimezoneOffset();
    function getScreen() {
    return "x"+window.screen.width+"y"+window.screen.height+"d"+window.screen.colorDepth;
    }
    var cookieEnabled = window.navigator.cookieEnabled ? "yes" : "no";
    var domLocalStorage = null;
    try {
    localStorage.fp = "test";
    domLocalStorage = "";
    if (localStorage.fp == "test") {
    domLocalStorage = "yes";
    } else {
    domLocalStorage = "no";
    }
    } catch (ex) {
    domLocalStorage = "no";
    }
    function fingerprint() {
    var nav = window.navigator, t = nav.userAgent;
    t += getScreen();
    if(nav.plugins.length > 0) {
    for(var i = 0; i < nav.plugins.length; i++) {
    t += nav.plugins[i].filename + nav.plugins[i].version + nav.plugins[i].description;
    }
    }
    if(nav.mimeTypes.length > 0) {
    for(var i = 0; i < nav.mimeTypes.length; i++) {
    t += nav.mimeTypes[i].type;
    }
    }
    if((/MSIE[/\s][\d.]+/g).test(nav.userAgent)) {
    try {
    t += activeXDetect();
    }
    catch(e) {
    // ignore
    }
    }
    return hashCode(t);
    }
    </script>
    
    
     
Chargement...
Similar Threads - universelle addEventListener Forum Date
Nouveautés Google AdWords : campagnes universelles AdWords 7 Février 2013
recherche universelle plus de lien ? Référencement Google 1 Septembre 2010