version universelle de addEventListener () ?

WRInaute accro
Bonjour

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

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

JavaScript:
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;
}
 
WRInaute accro
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.
 
Dernière édition:
WRInaute accro
Bonjour spout ;)

Une autre version :

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

Cà fonctionnerait ou non ?

Merci de ton aide.


JavaScript:
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;
}
 
WRInaute accro
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.
 
WRInaute accro
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>
 
WRInaute accro
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.
 
WRInaute impliqué
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.
 
WRInaute accro
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.
 
WRInaute accro
Pardon

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

JavaScript:
// 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.
 
WRInaute accro
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.


JavaScript:
<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>
 
Haut